gpt4 book ai didi

mysql - 可以利用多个 'range' 列上的索引吗?

转载 作者:行者123 更新时间:2023-11-29 12:13:51 25 4
gpt4 key购买 nike

我有这个索引:

alter table wx_cbmessage add index main_query (cbm_owner_id,cbm_status,cbm_date,cbm_notification_date);

这个查询:

SELECT SQL_CALC_FOUND_ROWS ... 
FROM `wx_cbmessage` `msg` FORCE INDEX (main_query)
LEFT JOIN wx_user `from` ON cbm_from_user_id=from.login
WHERE `cbm_owner_id`='username'
AND cbm_date <= 1431448013
AND (`cbm_notification_date`=0 OR cbm_notification_date <= 1431448013)
AND `cbm_status`=1
ORDER BY `cbm_date` DESC
LIMIT 25

cbm_notification_date 作为索引的一部分有什么意义吗?可以用吗?

前两列只是完全匹配,但我不知道 MySQL 是否可以通过多个范围搜索执行任何操作。

最佳答案

请使用表别名限定列名。在不知道哪列是什么表的情况下,我必须猜测如何提供建议。

两个范围——不会被使用。

EXPLAIN 无法解释 - 尝试 EXPLAIN FORMAT=JSON SELECT ...

我推荐这个(因为列都在同一个表中):

INDEX(cbm_owner_id, cbm_status, cbm_date)

它可用于 2 个常量和一个范围。它可以用于ORDER BY。优化器没有好的方法来选择使用哪一个。

(`cbm_notification_date`=0 OR cbm_notification_date <= 1431448013) 

由于 OR 和“范围”的组合,无法使用索引。 (x=1 OR x=3) 相当于 (x IN (1,3)),它比范围更好,尽管不如范围常数。

关于mysql - 可以利用多个 'range' 列上的索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com