国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

MySQL查詢優(yōu)化:LIMIT 1避免全表掃描提高查詢效率

2024-07-24 12:42:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
在某些情況下,如果明知道查詢結(jié)果只有一個(gè),SQL語(yǔ)句中使用LIMIT 1會(huì)提高查詢效率。
例如下面的用戶表(主鍵id,郵箱,密碼):
復(fù)制代碼 代碼如下:m.survivalescaperooms.com

create table t_user(
id int primary key auto_increment,
email varchar(255),
password varchar(255)
);

每個(gè)用戶的email是唯一的,如果用戶使用email作為用戶名登陸的話,就需要查詢出email對(duì)應(yīng)的一條記錄。
SELECT * FROM t_user WHERE email=?;
上面的語(yǔ)句實(shí)現(xiàn)了查詢email對(duì)應(yīng)的一條用戶信息,但是由于email這一列沒(méi)有加索引,會(huì)導(dǎo)致全表掃描,效率會(huì)很低。
SELECT * FROM t_user WHERE email=? LIMIT 1;
加上LIMIT 1,只要找到了對(duì)應(yīng)的一條記錄,就不會(huì)繼續(xù)向下掃描了,效率會(huì)大大提高。
LIMIT 1適用于查詢結(jié)果為1條(也可能為0)會(huì)導(dǎo)致全表掃描的的SQL語(yǔ)句。
如果email是索引的話,就不需要加上LIMIT 1,如果是根據(jù)主鍵查詢一條記錄也不需要LIMIT 1,主鍵也是索引。
例如:
SELECT * FROM t_user WHERE id=?;
就不需要寫(xiě)成:
SELECT * FROM t_user WHERE id=? LIMIT 1;
二者效率沒(méi)有區(qū)別。
附上我做的實(shí)驗(yàn):
存儲(chǔ)過(guò)程生成100萬(wàn)條數(shù)據(jù):
復(fù)制代碼 代碼如下:m.survivalescaperooms.com

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

查詢語(yǔ)句
復(fù)制代碼 代碼如下:m.survivalescaperooms.com

SELECT * FROM t_user WHERE email='222@xxg.com'; 耗時(shí)0.56 s
SELECT * FROM t_user WHERE email='222@xxg.com' LIMIT 1; 耗時(shí)0.00 s

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 莆田市| 定陶县| 晴隆县| 青海省| 长岛县| 庐江县| 本溪| 吴川市| 厦门市| 图片| 阜宁县| 永寿县| 宝山区| 庐江县| 左云县| 视频| 庆阳市| 三穗县| 东乌珠穆沁旗| 文成县| 古浪县| 咸丰县| 阳江市| 双牌县| 长宁区| 雅江县| 清河县| 阜阳市| 富源县| 尚义县| 桦南县| 连平县| 昭平县| 应城市| 台北县| 三原县| 平湖市| 岳阳县| 甘孜| 龙口市| 城步|