gpt4 book ai didi

mysql查询速度慢,加索引不行

转载 作者:行者123 更新时间:2023-11-29 05:48:09 26 4
gpt4 key购买 nike

我有一个包含 100k+ 行的表,但我的查询速度很慢(大约需要 3 秒)。

我试过制作这样的索引,但这似乎没有任何作用。

ALTER TABLE pm ADD INDEX (sender,reciever)

这是我的查询:

SELECT id,message FROM pm WHERE reciever = '28075' OR sender = '28075'

这大约需要 3 秒。

表PM说明

'' EXPLAIN OF TALBE PM

查询的解释:

 to

显示创建表下午:

`CREATE TABLE `pm` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` int(11) NOT NULL,
`sender` int(11) NOT NULL,
`reciever` int(11) NOT NULL,
`users` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`readm` int(11) NOT NULL DEFAULT '0',
`forOp` int(11) NOT NULL DEFAULT '0',
`bussy` int(11) NOT NULL DEFAULT '0',
`bericht` longtext CHARACTER SET utf8mb4,
`aantal` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `users` (`users`(191)),
KEY `sender` (`sender`,`reciever`)
) ENGINE=InnoDB AUTO_INCREMENT=1637118 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`

最佳答案

查询不能使用索引的原因是它使用了OR,而你的索引不能用于匹配receiver(因为复合索引需要在匹配第二列之前先匹配最左边的列)

MySQL 5 添加了一个 index_merge 允许对同一个查询使用多个索引,所以如果你在 senderreceiver 上有单独的索引可以选择那些。

另一种方法是重写查询以使用 UNION 并再次使用单独的索引而不是复合索引:

SELECT id,message FROM pm WHERE reciever = '28075'
UNION
SELECT id,message FROM pm WHERE sender = '28075'

您可以阅读更多at this article

关于mysql查询速度慢,加索引不行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57497073/

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