mysql索引 - 连接两个表

时间:2011-11-14 09:44:03

标签: mysql indexing

我有一个表T1,其中2列是c1和c2。它们是表格U1中col c3的外键引用列。  查询类似于"select ....... from T1, U1 as Ux and U1 as Uy where T1.c1 = 'xyz' and T1.c1 = Ux.c3 and T1.c2 = Uy.c3"

如果编入索引,哪个col会给出最佳结果。 c1 单独 c1 c2的组合? ?

3 个答案:

答案 0 :(得分:0)

您可以使用EXPLAIN,只需将两种情况放在一起。自己尝试一下,您就可以轻松找到更好的查询

答案 1 :(得分:0)

加入怎么样?

SELECT * FROM T1
INNER JOIN U1 ON U1.c3=T1.c1 AND U1.c3=T1.c2
WHERE T1.c1 = 'xyz'

我真的没有得到你想做的事情,但是试图从这个c1和c2得到任何东西必须是相同的。

答案 2 :(得分:0)

只要您的“c1”列是查询的唯一部分,并且在复合索引(c1,c2)的情况下它位于索引的第一个位置,那么它就没有实际影响。它仍然会被优化。如果“c1”处于第二个位置,那么没有好......因为它本质上必须循环通过每个c2来匹配的c1。也就是说,如果你的c2列是一个像varchar 1000字符串那样糟糕的值,它会扼杀,因为它必须考虑索引键长度和额外的分页。但是,无论如何,对这种组合的索引都不会被认为是常见的。