gpt4 book ai didi

mysql - 为什么 MySQL 不使用我的 FULLTEXT 索引?

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

我有以下查询:

EXPLAIN SELECT *
FROM glean2_saves
WHERE username = '1d85d5aed8b02b3d6b0c155a563293ef'
AND ses_id = 'e4fa3ae216f5033fbd16d6c66370954c'
AND save_status =1
ORDER BY id DESC

结果是这样的:

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1 SIMPLE glean2_saves ref save_status,username,ses_id save_status 2 const 286315 Using where; Using filesort

这是我的索引:

Action  Keyname Type    Unique  Packed  Column  Cardinality Collation   Null    Comment
Edit Edit Drop Drop PRIMARY BTREE Yes No id 331837 A
Edit Edit Drop Drop save_status BTREE No No save_status 3 A YES
Edit Edit Drop Drop nickname FULLTEXT No No nickname 7374 YES
Edit Edit Drop Drop username FULLTEXT No No username 7717 YES
Edit Edit Drop Drop ses_id FULLTEXT No No ses_id 11442 YES

我确实在右列上有索引,但为什么不使用它们?为什么它们在“可能的键”(save_status、用户名、ses_id)中,但实际上只使用了一个“键”:save_status

如果没有索引,查询时间会太长(有时超过 15 秒),应该不到一秒。该数据库有超过 330k 条目。

最佳答案

对于此查询,您需要一个涵盖 whereorder by 子句的索引。该索引将是:

glean2_saves(username, ses_id, save_status, id)

请注意,由于您正在进行相等比较,因此前三列可以按任意顺序排列。但最后一列必须是 order byid

至于为什么 MySQL 不使用单独的索引。可以这么说,合并 where 子句的索引需要大量工作,并且可能比扫描一个索引并对其余列进行测试需要更多的工作。

关于mysql - 为什么 MySQL 不使用我的 FULLTEXT 索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21188923/

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