Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql在WHERE和in GROUP BY中使用索引_Mysql_Performance_Indexing - Fatal编程技术网

mysql在WHERE和in GROUP BY中使用索引

mysql在WHERE和in GROUP BY中使用索引,mysql,performance,indexing,Mysql,Performance,Indexing,这是一个多对多表,每侧链接到表,每个表大约有70000条记录。多对多有大约530万条记录 两个“边”表都有外键引用(一个是“令牌”,另一个是“段落”)。为了找出包含给定标记的所有段落,我需要按照 SELECT para_id FROM many_to_many WHERE token_id = 3333 GROUP BY para_id; 尽管“token_id”列是复合主键的“最左边”列,并且在para_id上有一个索引(由para_id外键使用),但这似乎运行得非常慢 我尝试过使用EXPL

这是一个多对多表,每侧链接到表,每个表大约有70000条记录。多对多有大约530万条记录

两个“边”表都有外键引用(一个是“令牌”,另一个是“段落”)。为了找出包含给定标记的所有段落,我需要按照

SELECT para_id FROM many_to_many WHERE token_id = 3333 GROUP BY para_id;
尽管“token_id”列是复合主键的“最左边”列,并且在para_id上有一个索引(由para_id外键使用),但这似乎运行得非常慢


我尝试过使用EXPLAIN,但这似乎从未提到使用para_id索引。我的问题是:有可能让MySQL使用para_id索引吗?如果没有,如果我在查询中包含一个“JOIN paras on paras.ID=many_to_many.para_ID”,是否可以让它使用表“paras”的索引(在“ID”上)?这可能会导致性能提高吗?

您可能需要通过
token\u id
字段索引
many to\u many
。复合主键在这里没有帮助。

请发布表的结构和
解释
输出。为什么在没有聚合函数的查询中使用
分组依据
?我敢打赌,
selectdistinct
在这种情况下会更有效。@Sammitch-ah,有道理。非常感谢,我将对此进行探讨。如果你关心分数等问题,也许你应该给出答案。谢谢。。。我已经读到,实际上复合主索引的功能类似于普通的单字段索引,但只适用于复合主索引中最左边的元素(本例中为token_id)。但是你的建议让我觉得我还是应该做一些实验。。。