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

本文探讨了在MySQL中如何为包含OR条件的查询建立有效的索引,通过具体实例展示了如何通过索引优化来提高查询效率,并给出了具体的索引创建建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值