【发布时间】:2012-06-18 22:09:02
【问题描述】:
SELECT
t1.`id` ,
t1.`some_key` ,
t1.`date` ,
t2.`data`
FROM `table1` AS `t1`
LEFT JOIN `table2` AS `t2` ON t2.`id` = t1.`some_key`
WHERE DATE( t1.`date` ) = DATE( NOW( ) )
我正在尝试搜索 table1 中今天添加的所有记录。我不知道记录的数量。我尝试在日期列中添加一个索引,但是我的 EXPLAIN 仍然显示 MySQL 搜索 table1 中的所有 n 多行。
EDIT::: 按要求解释
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 4
1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 t1.some_key 1
2 DERIVED table2 ALL indx NULL NULL NULL 5 Using where
【问题讨论】:
-
date上有索引吗?即使有,在桌子上不使用date()函数并使用>会更有效。WHERE t1.date > DATE(NOW()) -
我的 0.02:鉴于您转换索引数据的事实,没有办法事先知道结果。结果:全扫描
-
索引或没有索引它仍然会进行全面扫描。你会怎么做呢?