如何为MySQL中的多对多连接正确索引链接表?

如何为MySQL中的多对多连接正确索引链接表?,第1张

如何为MySQL中的多对多连接正确索引链接表?

这取决于您的搜索方式。

如果您这样搜索:

SELECt *FROM table1 t1JOIN table_table tt ON (tt.table_1 = t1.id)JOIN table2 t2 ON (t2.id = tt.table_2)WHERe t1.id = @id

那么您需要:

ALTER TABLE table_table ADD ConSTRAINT pk_table1_table2 (table_1, table_2)

在这种情况下,

table1
将被引入,
NESTED LOOPS
并且只有在
table1
首先建立索引时,您的索引才可用。

如果您这样搜索:

SELECt *FROM table2 t2JOIN table_table tt ON (tt.table_2 = t2.id)JOIN table1 t1 ON (t1.id = tt.table_1)WHERe t2.id = @id

那么您需要:

ALTER TABLE table_table ADD ConSTRAINT pk_table1_table2 (table_2, table_1)

由于上述原因。

您在这里不需要独立的索引。复合索引可以在可以使用第一列的纯索引的任何地方使用。如果使用独立索引,则将无法有效搜索这两个值:

SELECt 1FROM table_tableWHERe table_1 = @id1  AND table_2 = @id2

对于这样的查询,两列都至少需要一个索引。

为第二个字段添加一个附加索引从不坏:

ALTER TABLE table_table ADD ConSTRAINT pk_table1_table2 PRIMARY KEY (table_1, table_2)CREATE INDEX ix_table2 ON table_table (table_2)

主键将用于搜索

on both values
和基于值的搜索
table_1
,附加索引将用于基于值的搜索
table_2



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5150216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存