当我使用> =或< =?时,我可以在日期字段上放置一个mysql索引吗?

时间:2010-06-15 21:00:54

标签: mysql indexing

我的表用户,日期和日期,用户的索引,但是当我发出像

这样的查询时
SELECT * FROM table WHERE date >= '2010-5-1' and user='test';

它不使用日期,用户索引使用用户索引。有没有办法让mysql使用这些查询的日期,用户索引?

3 个答案:

答案 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)索引中它们将靠近在一起。

在向优化程序提供提示时,请确保不要让事情变得更糟。优化器通常知道它在做什么。

如果您仍然认为优化器选择了不正确的索引,您可以更新表统计信息并查看是否有帮助。