本帖最后由 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会导致索引失效,但我不太确定。
求大神解答,顺便给给解决这个问题的方案 |