我的桌子看起来像是:
CREATE TABLE myTable (
id INT NOT NULL AUTO_INCREMENT,
atTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
stuff varchar(100) NULL,
CONSTRAINT myTable_PK PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARSET=latin1
COLLATE=latin1_swedish_ci ;
atTime
列未编入索引。
id
列始终按时间顺序排列。
我想选择id
>所有行x和atTime
<年。
有没有办法在不对每个选择进行全表扫描而不向atTime
添加索引的情况下执行此操作?
基本上我想要的是告诉MYSQL依赖于id
按时间顺序来优化查询。
修改 想出了一种使用子查询来实现它的方法,但它只能使它快30%左右:
SELECT * from myTable
WHERE id<( SELECT id FROM myTable
WHERE atTime>'y'
ORDER BY id LIMIT 1
)
AND id>x
这两个查询本身几乎是即时的,但它们在一起需要相当长的时间。为什么会这样?