thinkphp mysql索引_在in查询语句中强行使用索引,thinkphp也可行

不得不说,mysql查询时选择索引不太智能。刚刚打开一个页面时候明显比其他同类页面慢很多。经分析同类页面的mysql语句结构完全一样。

explain SELECT `yid`,`co_name` FROM `hy_co_main` WHERE ( province_id=2 and industry_id in (93,102,103,105,106,108) ) ORDER BY yid desc LIMIT 30

不用索引,近7秒

SELECT `yid`,`co_name` FROM hy_co_main force index(index_industry_yid) WHERE ( province_id=2 and industry_id in (108,107,106,105,103,102,93) ) ORDER BY yid desc LIMIT 30 [ RunTime:0.064812s ]

用索引index_industry_yid,耗时不到0.0648秒

解决问题时,第一个想到的是使用force index强制使用索引。本程序使用thinkphp,查了不少资料都没有相关用法。尝试使用其他办法时,都比较麻烦。我对thinkphp还不太熟,除了直接使用mysql语句外,抱着试试的态度,在M()的表名带上force index ,居然成功。

M("co_main force index(index_province_yid,index_industry_yid)")->...........

最后语句为

SELECT `yid`,`co_name` FROM hy_co_main force index(index_industry_yid) WHERE ( province_id=2 and industry_id in (108,107,106,105,103,102,93) ) ORDER BY yid desc LIMIT 30 [ RunTime:0.473065s ]

耗时约减为原来是百分之一。

有时候小小的一个尝试就能解决一个很大的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值