首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql里where条件中包含or应该如何建立有效的索引

2012-03-07 
mysql里where条件中包含or应该怎么建立有效的索引。SELECTt.*FROMcdb_threadstWHERE(t.fid 2Ort.otherfid

mysql里where条件中包含or应该怎么建立有效的索引。
SELECT   t.*   FROM   cdb_threads   t   WHERE   (t.fid= '2 '   Or   t.otherfid= '2 ')   AND   t.displayorder> =0   ORDER   BY   t.displayorder   DESC,   t.lastpost   DESC   LIMIT   0,   20
这条SQL语句应该如何优化建立索引呢,
ALTER   TABLE   `cdb_threads`   ADD   INDEX   `otherfid`   (   `fid`   ,   `otherfid`   ,   `displayorder`   ,   `lastpost`   )
我建立上面的索引后使用EXPLAIN分析了一下
EXPLAIN   SELECT   t.*   FROM   cdb_threads   t   WHERE   (t.fid= '2 '   Or   t.otherfid= '2 ')   AND   t.displayorder> =0   ORDER   BY   t.displayorder   DESC,   t.lastpost   DESC   LIMIT   0,   20  
发现没有使用索引哦,是不是有OR在查询条件里面不能使用索引?

[解决办法]
看一下手册上的索引合并优化部分就明白了。
如果同时有OR和 AND的话。优化器只考虑AND部分的优化。
所以你要对displayorder建立索引。
[解决办法]
你可以这样强制使用OR条件中的字段作为索引。

SELECT t.* FROM cdb_threads t FORCE INDEX(t.fid,t.otherfid) WHERE (t.fid= '2 ' Or t.otherfid= '2 ') AND t.displayorder> =0 ORDER BY t.displayorder DESC, t.lastpost DESC LIMIT 0, 20

热点排行