| 确定从语义上查询条件可以直接下推后,重写如下: SELECT target,   Count(*)  FROM operation  WHERE target = 'rm-xxxx'  GROUP BY target 
 执行计划变为: +----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+ | 1 | SIMPLE | operation | ref | idx_4 | idx_4 | 514 | const | 1 | Using where; Using index | +----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+ 
 7、提前缩小范围 先上初始 SQL 语句: SELECT *  FROM my_order o   LEFT JOIN my_userinfo u   ON o.uid = u.uid  LEFT JOIN my_productinfo p   ON o.pid = p.pid  WHERE ( o.display = 0 )   AND ( o.ostaus = 1 )  ORDER BY o.selltime DESC  LIMIT 0, 15  
 该SQL语句原意是:先做一系列的左连接,然后排序取前15条记录。从执行计划也可以看出,最后一步估算排序记录数为90万,时间消耗为12秒。 +----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+ | 1 | SIMPLE | o | ALL | NULL | NULL | NULL | NULL | 909119 | Using where; Using temporary; Using filesort | | 1 | SIMPLE | u | eq_ref | PRIMARY | PRIMARY | 4 | o.uid | 1 | NULL | | 1 | SIMPLE | p | ALL | PRIMARY | NULL | NULL | NULL | 6 | Using where; Using join buffer (Block Nested Loop) | +----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+ 
 由于最后 WHERE 条件以及排序均针对最左主表,因此可以先对 my_order 排序提前缩小数据量再做左连接。SQL  重写后如下,执行时间缩小为1毫秒左右。 SELECT *  FROM ( SELECT *  FROM my_order o  WHERE ( o.display = 0 )   AND ( o.ostaus = 1 )  ORDER BY o.selltime DESC  LIMIT 0, 15 ) o   LEFT JOIN my_userinfo u   ON o.uid = u.uid   LEFT JOIN my_productinfo p   ON o.pid = p.pid  ORDER BY o.selltime DESC limit 0, 15 
 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |