我有一个这样的查询来查找主键的最大/最小值,它满足where条件。
SELECT id
FROM mytable
WHERE date_created >= '2015-01-27 00:00:00'
AND date_created <= '2015-01-27 23:59:59'
LIMIT 1
和EXPLAIN
+----+-------------+------------------------+------+---------------+------+---------+------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------------+------+---------------+------+---------+------+----------+-------------+
| 1 | SIMPLE | mytable | ALL | NULL | NULL | NULL | NULL | 44726469 | Using where |
+----+-------------+------------------------+------+---------------+------+---------+------+----------+-------------+
并且最多,
SELECT id
FROM mytable
WHERE date_created >= '2015-01-27 00:00:00'
AND date_created <= '2015-01-27 23:59:59'
ORDER BY id DESC
LIMIT 1
和EXPLAIN将给出
+----+-------------+------------------------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | mytable | index | NULL | PRIMARY | 4 | NULL | 1 | Using where |
+----+-------------+------------------------+-------+---------------+---------+---------+------+------+-------------+
当我对一个非常大的表运行此查询时,查询正在超时。有没有其他方法可以找到这些值?
id是主键,我已经为date_created创建了索引。但是对性能没有任何影响。
答案 0 :(得分:0)
在插入和删除后创建触发器是一种可能的解决方案,并维护一个两行表来存储主键的最大值,最小值。
答案 1 :(得分:-1)