select * 比select column快很多奇怪案例分析
遇到MYSQL傻傻的地方,下面给个案例,大家感受下:
注意以下两个sql只有select *和select g.id区别。
SQL1:
SELECT
g.id
FROM
table1 g
INNER JOIN table2 l ON concat('订单号:',CONVERT(g.id,char)) = l.info
WHERE LOCATE('付款操作',l.info) AND g.p = 2
LIMIT 100
查询时间:5.28s
SQL2:
SELECT
*
FROM
table1 g
INNER JOIN table2 l ON concat('订单设为付款操作成功 订单号:',CONVERT(g.id,char)) = l.info
WHERE LOCATE('付款操作成功',l.info) AND g.p = 2
LIMIT 100
查询时间:0.21s
注意以下Sending data的sql1比sql2慢,这是不是很诡异!!!!!!!!!!!!!!
SQL1:

SQL2:

分析下profile的情况:
sql1的Context_voluntary | Context_involuntary | Block_ops_in | Block_ops_out 比sql2的高很多,按理说字段少,处理数据更快啊!这里为什么反而更慢?????
Context_voluntary :这个是主动上下文切换次数
Context_involuntary :这个是被动上下文切换次数
Block_ops_in :这个是阻塞输入操作
Block_ops_out :这个是阻塞输出操作
下面说下原因为什么select column比select *慢:
1.select column比select *处理的数据少
2.mysql的select操作使用的是悲观锁
3.cpu对select column的处理速度要快于select *
4.导致cpu处理完一批数据,ops_in 跟不上,而使用悲观锁,cpu不会自旋,等待数据,而是切换到其它任务
5.所以数据量少的上下文切换的更频繁
6.所以select * 比select column快了很多
解决办法:
多加几个字段,增加数据量,这样cpu就没有等待,进行的上下文切换就会少很多,速度就会快很多。如果应用嫌获得数据太多,应用层获得数据把这些数据进行过滤掉就行了。最好的办法是拆分字段,使查询走索引。
SELECT
g.id,g.column1,g.cloumn2
FROM
table1 g
INNER JOIN table2 l ON concat('订单号:',CONVERT(g.id,char)) = l.info
WHERE LOCATE('付款操作',l.info) AND g.p = 2
LIMIT 100
select * 比select column快很多奇怪案例分析的更多相关文章
- 数据库sql优化总结之1-百万级数据库优化方案+案例分析
项目背景 有三张百万级数据表 知识点表(ex_subject_point)9,316条数据 试题表(ex_question_junior)2,159,519条数据 有45个字段 知识点试题关系表(ex ...
- Insert Into select 与 Select Into 哪个更快?
在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SELECT INTO : 那么二者语法上有什么区别?性能上又如何呢? 围绕着这两个 ...
- SQL笔记1:SELECT及SELECT高级应用
T-SQL笔记1:SELECT及SELECT高级应用 本章摘要 1:安装AdventureWorks 2:基本运算符和表达式 3:between 4:like 5:escape 6:TOP 7:G ...
- sql: sybase与oracle中insert into select和select into的用法
1. sybase与oracle中insert into select和select into的用法 http://wjlvivid.iteye.com/blog/1921679 Sybase 一.首 ...
- oracle 中 insert select 和 select insert 配合使用
Insert Into select 与 Select Into 哪个更快? 在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SEL ...
- Oracle中复制表的方法(create as select、insert into select、select into)
转: Oracle中复制表的方法(create as select.insert into select.select into) 2018-07-30 22:10:37 小白白白又白cdllp 阅读 ...
- select * 和select 1 以及 select count(*) 和select count(1)的区别
select 1 和select * select * from 表:查询出表中所有数据,性能比较差: select 常量 from 表:查询出结果是所有记录数的常量,性能比较高: selelct 常 ...
- PHP MySQL Select 之Select
从数据库表中选取数据 SELECT 语句用于从数据库中选取数据. 语法 SELECT column_name(s) FROM table_name 注释:SQL 语句对大小写不敏感.SELECT 与 ...
- select * from (select P.*,ROWNUM RN FROM(select * from Mp_Relatedart where pubbaseid=785 order by ID ASC )P)M WHERE M.RN>2 and M.RN <= 7
select * from (select P.*,ROWNUM RN FROM(select * from Mp_Relatedart where pubbaseid=785 order by ID ...
随机推荐
- 海量日志收集利器 —— Flume
Flume 是什么? Flume是一个分布式.可靠.和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的 ...
- pat1097. Deduplication on a Linked List (25)
1097. Deduplication on a Linked List (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 ...
- Unity Download Assistant Error: 'SendRequest Error' while downloading ini file from http://files.unity3d.com/bootstrapper/29055738eb78/unity-5.3.6f1-win.ini
Unity 官网的哥们如此说道 I open the exe on Compatibility Mode , it's solved. You can try. :) 翻译就是 我用兼容模式打开,就能 ...
- 小程序的switch组件
小程序的switch开关组件,总结下大概有三种使用场景. 其一: 纯展示场景, 用来展示某个开关值是打开还是关闭的,这个场景比较简单,给个disabled属性就ok了: 其二: 用户点击后立即切换开关 ...
- Js/Jquery获取input file的文件名
html代码: <input type="file" name="file" id="file" class="in ...
- CSS单词换行and断词,你真的完全了解吗
背景 某天老板在群里反馈,英文单词为什么被截断了? 很显然,这是我们前端的锅,自行背锅.这个问题太简单了,css里加两行属性,分分钟搞定. 开心的提交代码,刷新页面.我擦,怎么还是没有断词?不可能啊! ...
- windows无法连接到打印机 操作失败,错误为0x00000002 解决方案
平时使用局域网打印机没有问题,今天突然脱机了,错误号为0x00000002 服务器上打印机一切正常,别人使用也一切正常. 最后,重启了Spooler服务后搞定. 重新链接打印机,搞定!
- 【来龙去脉系列】QRCode二维码的生成细节和原理
二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字, ...
- uvm_reg_adapter——寄存器模型(十八)
uvm_reg_adapter 功能就是在uvm_reg_bus_op和总线操作之间的转换.主要包含两个函数reg2bus 和bus2reg. //-------------------------- ...
- logname,who -m,who -q,id,su,su -l 用户名,su -,date,cal,cal 12 2009,cal -y 2008,du -s 目录,
logname,who -m,who -q,id,su,su -l 用户名,su -,date,cal,cal 12 2009,cal -y 2008,du -s 目录,