MySQL查詢優化 LIMIT 1避免全表掃瞄

2021-08-27 10:18:29 字數 1298 閱讀 2943

在某些情況下,如果明知道查詢結果只有乙個,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...