在MySQL表中正确索引的位置?

时间:2011-08-03 12:33:48

标签: mysql performance

我有一些类似的问题:

SELECT * 
FROM users 
WHERE cat = X 
AND cat2 = X 
AND title LIKE %X% 
AND content LIKE %X% 
AND email LIKE %X% 
AND box LIKE %X% 
AND address LIKE %X%

那些长而有点格式错误的查询是由专有软件完成的,所以我无法优化它们。有什么想法,我应该索引和改进,以获得更好的性能?

5 个答案:

答案 0 :(得分:2)

MySQL Indexes

  

如果LIKE的参数是无法启动且带有通配符的常量字符串,则该索引也可用于LIKE比较。

所以你对LIKE %X%部分运气不好。对于那些,不能使用索引,MySQL必须对表进行全面扫描。

答案 1 :(得分:2)

索引仅在表达式告诉您某个值的开始时才有用。因此,只有当表达式不以通配符开头时,LIKE运算符才有用。

field1 =    'value'   # Index this
field2 LIKE 'value%'  # Index this
field3 LIKE '%value%' # Do not index, beginning characters unknown.
field4 LIKE '%value%' # Do not index, beginning characters unknown.

同样适用于<><=>=运营商,对字段编制索引非常有用。

在您的情况下,在catcat2上添加索引。

答案 2 :(得分:1)

您无法获得该查询的LIKE部分。但是,通过为这两列提供组合索引,您可以确保catcat2快速。

答案 3 :(得分:1)

您最好的选择是在cat和cat2上设置多列索引:

INDEX( cat, cat2 )

你的字符串列上的索引根本没有提到,就像cularis所提到的那样。

答案 4 :(得分:0)

如果许多连续查询完全相同(我不知道是否属于这种情况),那么MySQL Query Cache将大大受益。