我的表用户,日期和日期,用户的索引,但是当我发出像
这样的查询时SELECT * FROM table WHERE date >= '2010-5-1' and user='test';
它不使用日期,用户索引使用用户索引。有没有办法让mysql使用这些查询的日期,用户索引?
答案 0 :(得分:1)
在求助于优化程序提示之前,请尝试分析表格。
ANALYZE TABLE table
答案 1 :(得分:0)
是的,通过指定USE INDEX(index_list),您可以告诉MySQL只使用其中一个命名索引来查找表中的行。
http://dev.mysql.com/doc/refman/5.1/en/index-hints.html
话虽这么说,你应该检查以确保你实际上比优化者的决定做得更好。查询如何优化以及使用哪些索引背后有很多复杂问题,有时数据的形状会导致选择看似反直觉(但有些更有效)的索引。
答案 2 :(得分:0)
在这里使用(date, user)
索引可能不是一个好主意。您需要的记录可以分布在该索引的许多页面上,而在(user, date)
索引中它们将靠近在一起。
在向优化程序提供提示时,请确保不要让事情变得更糟。优化器通常知道它在做什么。
如果您仍然认为优化器选择了不正确的索引,您可以更新表统计信息并查看是否有帮助。