两条SQL, 为什么增加一个LIMIT 1,会提高近一倍的速度?
SELECT * FROM test_user WHERE username = '500000';
SELECT * FROM test_user WHERE username = '500000' LIMIT 1 ;
耗时分别是: 0.814s 和 0.407s,
注,test_user 总数据量是100w,表结构如下
CREATE TABLE test_user (
id BIGINT(20) PRIMARY KEY NOT NULL autoincrement ,
username VARCHAR(11) DEFAULT NULL,
gender VARCHAR(2) DEFAULT NULL,
PASSWORD VARCHAR(100) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
如图:
后者的图示:
我的解释是:
500000,即50w 刚好是总数据量100w的一半,limit 1 指示mysql 查询到一行即返回, 而没有limit 的情况下,会进行全表扫描!! 所以说,如果,能够确定结果只有一行,或者只需要一行数据,可以增加个 limit !
但是观察发现,executing的时间, 及其他的时间都是差不多的,差别最大的时间是: Sending data,但是Bytes_sent 却是几乎一样的, why?
请问你用的什么数据库连接工具呢?我用 navicat 15 版本的,没发现有这个概况和状态
你可能没有看懂我的意思,跟这个无关
@CanntBelieve: 就是想简单请问下你用的什么数据库工具
感觉有点鸡肋啊,什么时候能确定只有一行,不就是根据主键查询的时候么
你可能没有看懂我的意思
Bytes_sent是实际发送的字节数,而Sending data中包含了读取、处理、发送几个环节所以时间差别就在‘处理’环节上