MySQL查詢優(yōu)化:LIMIT 1避免全表掃描提高查詢效率_MySQL教程
推薦: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_modeauthor: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è)置,這樣
相關(guān)MySQL教程:
- MSSQL清空日志刪除日志文件
- 關(guān)于數(shù)據(jù)庫中保留小數(shù)位的問題
- 解析mysql與Oracle update的區(qū)別
- mysql 導入導出數(shù)據(jù)庫以及函數(shù)、存儲過程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現(xiàn)Can''t create/write to file ''#sql_5c0_0.MYD''的問題
- 深入理解SQL的四種連接-左外連接、右外連接、內(nèi)連接、全連接
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- mysql重裝后出現(xiàn)亂碼設(shè)置為utf8可解決
- 淺析一個MYSQL語法(在查詢中使用count)的兼容性問題
- 解析MySQL中INSERT INTO SELECT的使用
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
猜你也喜歡看這些
- 數(shù)據(jù)類型的表達式轉(zhuǎn)換為另一種數(shù)據(jù)類型
- 解決sql server查詢速度慢11個方法
- 解析使用 SQL Server 數(shù)據(jù)庫查詢累計值的方法
- 探討SQL Server 2005.NET CLR編程
- 怎樣使用SQLServer數(shù)據(jù)庫查詢累計值
- 解析SQL Server 2005實現(xiàn)數(shù)據(jù)庫緩存依賴
- 關(guān)于避免在 PL/SQL 中使用嵌套游標查詢
- 淺談SQL Server數(shù)據(jù)庫優(yōu)化經(jīng)驗總結(jié)
- 淺談SQL判斷是否存在
- 比較SQL Server數(shù)據(jù)庫導入導出數(shù)據(jù)方式
- 相關(guān)鏈接:
- 教程說明:
MySQL教程-MySQL查詢優(yōu)化:LIMIT 1避免全表掃描提高查詢效率
。