MySQL 8.0.16+中LIMIT值较大时SELECT返回空结果的异常问题
MySQL 8.0.16及以上版本查询结果异常问题
在MySQL 8.0.16及更高版本中,执行特定查询语句时会出现如下异常现象:
- 不设置
LIMIT或设置LIMIT 100+时,查询返回空结果 - 设置
LIMIT 1时,能正常查询到符合条件的数据 - 删除
col_1_idx索引后,不设置LIMIT的语句可正常返回结果
问题查询语句
SELECT id FROM tbl_test_bug WHERE col_1 = 1 AND col_2 = 1 -- LIMIT 1 -- 加上此句可正常返回数据
可复现的测试环境及数据
以下是用于复现问题的建表语句和数据生成脚本:
-- 创建表 DROP TABLE IF EXISTS tbl_test_bug; CREATE TABLE tbl_test_bug ( id int UNSIGNED NOT NULL AUTO_INCREMENT, col_1 TINYINT UNSIGNED NOT NULL, col_2 TINYINT UNSIGNED NOT NULL, PRIMARY KEY (id DESC), KEY col_1_idx (col_1), KEY col_2_idx (col_2) ) ENGINE=InnoDB; -- 插入800条随机测试数据 DELIMITER ;; CREATE PROCEDURE gen_rows_test() BEGIN DECLARE idx INT DEFAULT 800; WHILE idx > 0 DO INSERT INTO tbl_test_bug (col_1, col_2) VALUES (FLOOR(1 + (RAND() * 2)), FLOOR(1 + (RAND() * 10))); SET idx = idx - 1; END WHILE; END;; CALL gen_rows_test();; DROP PROCEDURE IF EXISTS gen_rows_test;;
问题现象直观展示
截图中清晰呈现了两种查询的结果差异:带LIMIT 1的语句返回1条符合条件的id数据,而未设置LIMIT的语句返回空结果,直接体现了该异常问题。
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

