gpt4 book ai didi

mysql - 索引mysql查询

转载 作者:行者123 更新时间:2023-11-29 00:38:41 24 4
gpt4 key购买 nike

我在 mysql 中有这个查询,我想被索引,什么是最好的索引组合?

SELECT cometchat.id, cometchat.from, cometchat.to, cometchat.message, cometchat.sent, cometchat.read, cometchat.direction
FROM cometchat
WHERE (
(
cometchat.to = '30411'
AND cometchat.direction <>2
)
OR (
cometchat.from = '30411'
AND cometchat.direction <>1
)
)

我试过这些索引,但它们没有用:

ALTER TABLE  `cometchat` ADD INDEX (  `from`,`to`,`direction`)
ALTER TABLE `cometchat` ADD INDEX ( `from`,`to`)
ALTER TABLE `cometchat` ADD INDEX ( `to`,`direction`)
ALTER TABLE `cometchat` ADD INDEX ( `from`,`direction`)

如有任何帮助,我们将不胜感激。

最佳答案

由于 where 子句中的 OR,您需要 2 个单独的索引来优化选择:

ALTER TABLE  `cometchat` ADD INDEX index1 (  `to`,`direction`)
ALTER TABLE `cometchat` ADD INDEX index2 ( `from`,`direction`)

我不会费心尝试制作这些覆盖索引——只需承担点查找的成本。但是,如果您希望它们被覆盖,您需要:

   ALTER TABLE  `cometchat` ADD INDEX index1 
( `to`,`direction`, `message`, `sent`, `read` );
ALTER TABLE `cometchat` ADD INDEX index2
( `from`,`direction`,`message`, `sent`, `read`);

覆盖索引将提供最佳的选择性能,但它需要大量额外的存储空间,并且会增加插入开销——所以我只会在非覆盖索引的性能不足时才使用它们,这是一个插入灯表。

此外,只是一些一般性建议,在命名数据库、表或列时,我会避免使用“from”等 MySQL 保留字。 https://dev.mysql.com/doc/refman/5.5/en/reserved-words.html
当您使用保留名称作为您真正要求的东西的名称时,会遇到一个错误的查询,这将导致另一个 SP 问题;)

关于mysql - 索引mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235094/

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