我有一个名为日的日期列的表格。我索引它的方式是使用多个键:
KEY user_id(user_id,day)
我想确保在进行选择every row for a user_id from the beginning of the month to a given day in the month
的查询时正确使用索引。例如,让我们说我想查询从月初到今天的每一天,编写查询的最佳方式是确保我点击索引,这里是#s到目前为止我所拥有的:
select * from table_name
WHERE user_id = 1
AND (day between DATE_FORMAT(NOW() ,'%Y-%m-01') AND NOW() )
答案 0 :(得分:0)
使用解释以确保您的查询是否使用您已创建的索引
例如
explain
select * from table_name
WHERE user_id = 1
AND (day between DATE_FORMAT(NOW() ,'%Y-%m-01') AND NOW() )
应该通过mysql优化器
为您提供查询计划的详细信息在可能密钥的查询计划中,应存在 user_id (索引)--->其中指出了可用于从特定表中获取结果集的可能索引
应存在键字段 user_id (索引)--->这表明正在用于获取结果的索引
额外 --->附加信息(使用索引 - 整个结果集可以从索引文件本身获取,使用where --->查询使用索引来过滤条件等等...)
在您的查询中,您提到了 user_id = 1 常量,这有助于减少要扫描的记录数量,即使在天进行范围检查,因此查询将使用索引,前提是您在 user_id 列中具有较少的重复值百分比