LIMIT 子句通常用于从 MySQL 表中检索记录子集。但是,当偏移值 (m) 变大时,查询的性能会显着下降。这是因为 MySQL 通常采用顺序扫描来遍历整个表,直到达到所需的偏移量。
为了缓解此性能问题,请考虑创建一个索引表,该索引表建立与您的主键对应的顺序键。目标表。这个辅助表,称为“索引表”,将充当目标表和所需行之间的桥梁。
通过将索引表连接到目标表,您可以使用 WHERE 子句高效地检索您需要的特定行。以下是如何实现此方法:
CREATE TABLE seq ( seq_no int not null auto_increment, id int not null, primary key(seq_no), unique(id) );
TRUNCATE seq; INSERT INTO seq (id) SELECT id FROM mytable ORDER BY id;
检索偏移量为 1,000,000 且限制为1000,执行以下命令查询:
SELECT mytable.* FROM mytable INNER JOIN seq USING(id) WHERE seq.seq_no BETWEEN 1000000 AND 1000999;
此优化查询利用索引表绕过顺序扫描并直接访问所需的行。因此,即使偏移值很大,性能也应该得到显着提高。
以上是如何优化具有大偏移量的 MySQL LIMIT 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!