【发布时间】:2011-05-04 06:35:31
【问题描述】:
我有一个 MySQL 表:
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
other_id INT NOT NULL,
expiration_datetime DATETIME,
score INT,
PRIMARY KEY (id)
)
我需要以以下形式运行查询:
SELECT * FROM mytable
WHERE other_id=1 AND expiration_datetime > NOW()
ORDER BY score LIMIT 10
如果我将此索引添加到 mytable:
CREATE INDEX order_by_index
ON mytable ( other_id, expiration_datetime, score);
MySQL 能否在上述查询中使用整个order_by_index?
好像应该可以,但是根据MySQL的documentation:“即使ORDER BY不完全匹配索引也可以使用索引,只要所有未使用的部分索引和所有额外的 ORDER BY 列是 WHERE 子句中的常量。"
上面的段落似乎表明索引只能用于常量查询,而我的是范围查询。
谁能澄清在这种情况下是否会使用索引?如果没有,有什么办法可以强制使用索引?
谢谢。
【问题讨论】:
标签: mysql indexing query-optimization sql-order-by