赞
踩
强制索引,即指定本次查询使用某个特定的索引,这样就可避免MySQL优化器使用低效的索引。
使用方法:sql语句里面机上force index(索引名)
select * from salaries force index(idx_emp_no ) where emp_no=10005
应用场景
当前需要统计当天用户的充值排行榜,这里就需要统计当天时间每一个独立用户充值的总金额,这里用到的索引是用户id(int类型)以及充值时间(timestamp类型),SQL语句如下:
SELECT userid, SUM(money) AS money FROM `pay` WHERE userid > 100 AND updatetime >= 'xxxx-xx-xx xx:xx:xx' AND updatetime <= 'xxxx-xx-xx xx:xx:xx' GROUP BY userid
上面的语句看似没啥问题,其实的确也没问题,但是就是查询时间太长了,每执行一次都要等很久。问了一下,原来MySQL执行的时候优先使用了int类型的userid这个索引,而userid这个查询只有下界,没有上界,这里面需要查询的数据量就很大了。这个时候就轮到我们的主角FORCE INDEX 出马了,强制MySQL使用updatetime这个索引,语句如下:
SELECT userid, SUM(money) AS money FROM `pay` FORCE INDEX(updatetime) WHERE userid > 100 AND updatetime >= 'xxxx-xx-xx xx:xx:xx' AND updatetime <= 'xxxx-xx-xx xx:xx:xx' GROUP BY userid
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。