SQL查询使用日期字段来确保我使用我的索引

时间:2016-06-30 16:30:50

标签: mysql indexing

我有一个名为日期列的表格。我索引它的方式是使用多个键:

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() )

1 个答案:

答案 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 列中具有较少的重复值百分比