在某些情況下,如果明知道查詢結果只有乙個,sql語句中使用limit 1會提高查詢效率。
例如下面的使用者表(主鍵id,郵箱,密碼):
create table t_user(
id int primary key auto_increment,
email varchar(255),
password varchar(255)
);
每個使用者的email是唯一的,如果使用者使用email作為使用者名稱登陸的話,就需要查詢出email對應的一條記錄。
select * from t_user where email=?;
上面的語句實現了查詢email對應的一條使用者資訊,但是由於email這一列沒有加索引,會導致全表掃瞄,效率會很低。
select * from t_user where email=? limit 1;
加上limit 1,只要找到了對應的一條記錄,就不會繼續向下掃瞄了,效率會大大提高。
limit 1適用於查詢結果為1條(也可能為0)會導致全表掃瞄的的sql語句。
如果email是索引的話,就不需要加上limit 1,如果是根據主鍵查詢一條記錄也不需要limit 1,主鍵也是索引。
例如:select * from t_user where id=?;
就不需要寫成:
select * from t_user where id=? limit 1;
二者效率沒有區別。
附上我做的實驗:
儲存過程生成100萬條資料:
begin
declare i int;
start transaction;
set i=0;
while i<1000000 do
insert into t_user values(null,concat(i+1,'@xxg.com'),i+1);
set i=i+1;
end while;
commit;
end
查詢語句
select * from t_user where email='[email protected]'; 耗時0.56 s
select * from t_user where email='[email protected]' limit 1; 耗時0.00 s
MySQL查詢優化 LIMIT 1避免全表掃瞄
在某些情況下,如果明知道查詢結果只有乙個,sql語句中使用limit 1會提高查詢效率。例如下面的使用者表 主鍵id,郵箱,密碼 create table t user id int primary key auto increment,email varchar 255 password varc...
MySQL查詢優化 LIMIT 1避免全表掃瞄
在某些情況下,如果明知道查詢結果只有乙個,sql語句中使用limit 1會提高查詢效率。例如下面的使用者表 主鍵id,郵箱,密碼 create table t user id int primary key auto increment,email varchar 255 password varc...
MySQL查詢優化 LIMIT 1避免全表掃瞄
在某些情況下,如果明知道查詢結果只有乙個,sql語句中使用limit 1會提高查詢效率。例如下面的使用者表 主鍵id,郵箱,密碼 create table t user id int primary key auto increment,email varchar 255 password varc...