MYSQL选择在一列上过滤,使用其他列的索引

时间:2018-02-21 08:57:36

标签: mysql mariadb innodb

我的桌子看起来像是:

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

这两个查询本身几乎是即时的,但它们在一起需要相当长的时间。为什么会这样?

0 个答案:

没有答案