免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7850 | 回复: 6
打印 上一主题 下一主题

【已解决】mysql的函数instr对索引有影响吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-16 14:30 |只看该作者 |倒序浏览
本帖最后由 cenalulu 于 2013-07-17 11:07 编辑

早上做了测试:
sql如下:
EXPLAIN SELECT c.*,i.* FROM cms_publish_1 c INNER JOIN cms_content_index i ON c.ContentID=i.ContentID WHERE  i.NodeID IN(55,1175,1177,1178,1179,1180,292,293,548,294,837,1278,1279,1280,309,310,311,1295,1296,1291) AND instr(c.Keywords,'xxxx') LIMIT 5
其中NodeID和keywords都设置了索引,但是这句语句执行很慢,打开要花掉一分钟的时间,表数据两是百万级的。

我猜想是instr这个模糊查询导致了keywords这个的索引失效。于是我把instr换成c.Keywords LIKE xxx%,
结果快了好多好多。

我有做了个测试,
sql如下:
其中indexID也设置了索引

EXPLAIN SELECT c.*,i.* FROM cms_publish_1 c INNER JOIN cms_content_index i ON c.ContentID=i.ContentID WHERE  i.NodeID IN(55,1175,1177,1178,1179,1180,292,293,548,294,837,1278,1279,1280,309,310,311,1295,1296,1291) AND i.IndexID IN(1254864,1254862,1244180) LIMIT 5

这个查询也很快,于是我认为instr会导致索引失效,但我不太确定。
求大神解答,顺便给给解决这个问题的方案

论坛徽章:
0
2 [报告]
发表于 2013-07-16 16:24 |只看该作者
没人帮帮忙吗,急{:3_198:}

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
3 [报告]
发表于 2013-07-17 09:10 |只看该作者
有,这个是个常见的影响索引工作的问题,任何一个优化查询的文章都会说到:不要对索引字段使用函数。

论坛徽章:
0
4 [报告]
发表于 2013-07-17 10:34 |只看该作者
回复 3# seesea2517
但是,我测试IN()里的也还是有索引效果的,这种说法有点绝对吧,主要还得看函数是如何构成的吧


   

论坛徽章:
0
5 [报告]
发表于 2013-07-17 10:42 |只看该作者
早上又改了一下,一想既然keywords索引失效而导致大大范围查找,于是把in里的条件减少,分开查询得到结果后再按照时间排序,但如此一来得到的结果有很大可能就跟之前的不一样了,除非分开查找的个数很多,但如此一来,把结果排序又要花费时间,愁啊

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
6 [报告]
发表于 2013-07-17 10:56 |只看该作者
回复 4# 指针扰幽梦


    in 好像不是函数吧,它是操作符。

论坛徽章:
0
7 [报告]
发表于 2013-07-17 11:00 |只看该作者
回复 6# seesea2517
额,是哦,我错了


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP