确定从语义上查询前提可以直接下推后,重写如下:
- 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 |
- +----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+
关于 MySQL 外部前提不能下推的具体表明声名请参考文章:
- http://mysql.taobao.org/monthly/2016/07/08
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) |
- +----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|