日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

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

編輯Tag賺U幣

推薦:Mysql高性能備份方案解決數(shù)據(jù)不間斷訪問
備份特點: 1、在大多數(shù)情況下,這種方式幾乎算得上是熱備。它無需關(guān)閉服務(wù),只需要設(shè)置只讀或者類似這樣的限制。 2、支持所有基于本地磁盤的存儲引擎,比如MYISAM、InnoDB和BDB,還支持Solid、PrimeXT和Faction。 3、備份速度最快,因為你只需要拷貝相關(guān)的二進制數(shù)據(jù)

在某些情況下,如果明知道查詢結(jié)果只有一個,SQL語句中使用LIMIT 1會提高查詢效率。
例如下面的用戶表(主鍵id,郵箱,密碼):
復制代碼 代碼如下:hl5o.cn

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

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

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

查詢語句
復制代碼 代碼如下:hl5o.cn

SELECT * FROM t_user WHERE email='[email protected]'; 耗時0.56 s
SELECT * FROM t_user WHERE email='[email protected]' LIMIT 1; 耗時0.00 s

分享:設(shè)置mysql的sql_mode
author:skate time:2013/04/11 mysql的sql_mode合理設(shè)置 sql_mode是個很容易被忽視的變量,默認值是空值,在這種設(shè)置下是可以允許一些非法操作的,比如允許一些非法數(shù)據(jù)的插入。在生產(chǎn)環(huán)境必須將這個值設(shè)置為嚴格模式,所以開發(fā)、測試環(huán)境的數(shù)據(jù)庫也必須要設(shè)置,這樣

來源:模板無憂//所屬分類:MySQL教程/更新時間:2013-04-21
相關(guān)MySQL教程