怎么理解mysql解释器返回的rows

发布于 2022-09-01 22:16:31 字数 1333 浏览 19 评论 0

MYSQL版本:5.6.24

先创建一个测试表:

CREATE TABLE `tb` (
`id` bigint(20) NOT NULL,
`account` varchar(10) DEFAULT NULL,
KEY `idx` (`account`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

再插入数据:

INSERT INTO tb(id,account) VALUES(1,'1001');
INSERT INTO tb(id,account) VALUES(2,'1000');
INSERT INTO tb(id,account) VALUES(3,'1002');
INSERT INTO tb(id,account) VALUES(4,'1003');
INSERT INTO tb(id,account) VALUES(5,'1000');
INSERT INTO tb(id,account) VALUES(6,'1000');
INSERT INTO tb(id,account) VALUES(7,'1005');
INSERT INTO tb(id,account) VALUES(8,'1000');
INSERT INTO tb(id,account) VALUES(9,'1006');

查看SQL执行解释:

EXPLAIN 
SELECT * FROM `tb` 
WHERE account = '1000' AND id > 1 AND id < 10
ORDER BY id ASC 

得到如下结果

    id  select_type  table   type    possible_keys  key     key_len  ref       rows  Extra                     
------  -----------  ------  ------  -------------  ------  -------  ------  ------  --------------------------
     1  SIMPLE       tb      range   idx            idx     41       (NULL)       3  Using where; Using index

但是这个SQL查询的返回记录数却是4行,而explain出来的rows为3,为什么呢?

SELECT * FROM `tb` 
WHERE account = '1000' AND id > 1 AND id < 10
ORDER BY id ASC 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

攀登最高峰 2022-09-08 22:16:31

查询account的值为1000,id大于1且小于10的行本来就是四行啊,查询出来肯定是四行记录啊!不信你自己数一下。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文