加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

8种常见SQL错误用法

发布时间:2019-06-03 22:08:48 所属栏目:MySql教程 来源:db匠
导读:1、LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。 SELECT* FROMoperation WH

确定从语义上查询条件可以直接下推后,重写如下:

  1. SELECT target,   
  2.        Count(*)   
  3. FROM   operation   
  4. WHERE  target = 'rm-xxxx'   
  5. GROUP  BY target 

执行计划变为:

  1. +----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+  
  2. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |  
  3. +----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+  
  4. | 1 | SIMPLE | operation | ref | idx_4 | idx_4 | 514 | const | 1 | Using where; Using index |  
  5. +----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+ 

关于 MySQL 外部条件不能下推的详细解释说明请参考文章:

http://mysql.taobao.org/monthly/2016/07/08

7、提前缩小范围

先上初始 SQL 语句:

  1. SELECT *   
  2. FROM   my_order o   
  3.        LEFT JOIN my_userinfo u   
  4.               ON o.uid = u.uid  
  5.        LEFT JOIN my_productinfo p   
  6.               ON o.pid = p.pid   
  7. WHERE  ( o.display = 0 )   
  8.        AND ( o.ostaus = 1 )   
  9. ORDER  BY o.selltime DESC   
  10. LIMIT  0, 15  

该SQL语句原意是:先做一系列的左连接,然后排序取前15条记录。从执行计划也可以看出,最后一步估算排序记录数为90万,时间消耗为12秒。

  1. +----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+  
  2. | id | select_type | table | type   | possible_keys | key     | key_len | ref             | rows   | Extra                                              |  
  3. +----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+  
  4. |  1 | SIMPLE      | o     | ALL    | NULL          | NULL    | NULL    | NULL            | 909119 | Using where; Using temporary; Using filesort       |  
  5. |  1 | SIMPLE      | u     | eq_ref | PRIMARY       | PRIMARY | 4       | o.uid |      1 | NULL                                               |  
  6. |  1 | SIMPLE      | p     | ALL    | PRIMARY       | NULL    | NULL    | NULL            |      6 | Using where; Using join buffer (Block Nested Loop) |  
  7. +----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+ 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读