MySQL查詢優(yōu)化:LIMIT 1避免全表掃描提高查詢效率_MySQL教程
推薦:Mysql高性能備份方案解決數(shù)據(jù)不間斷訪問(wèn)備份特點(diǎn): 1、在大多數(shù)情況下,這種方式幾乎算得上是熱備。它無(wú)需關(guān)閉服務(wù),只需要設(shè)置只讀或者類似這樣的限制。 2、支持所有基于本地磁盤的存儲(chǔ)引擎,比如MYISAM、InnoDB和BDB,還支持Solid、PrimeXT和Faction。 3、備份速度最快,因?yàn)槟阒恍枰截愊嚓P(guān)的二進(jìn)制數(shù)據(jù)
在某些情況下,如果明知道查詢結(jié)果只有一個(gè),SQL語(yǔ)句中使用LIMIT 1會(huì)提高查詢效率。例如下面的用戶表(主鍵id,郵箱,密碼):
復(fù)制代碼 代碼如下:www.wf0088.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=?;
就不需要寫成:
SELECT * FROM t_user WHERE id=? LIMIT 1;
二者效率沒(méi)有區(qū)別。
附上我做的實(shí)驗(yàn):
存儲(chǔ)過(guò)程生成100萬(wàn)條數(shù)據(jù):
復(fù)制代碼 代碼如下:www.wf0088.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ù)制代碼 代碼如下:www.wf0088.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
分享:設(shè)置mysql的sql_modeauthor:skate time:2013/04/11 mysql的sql_mode合理設(shè)置 sql_mode是個(gè)很容易被忽視的變量,默認(rèn)值是空值,在這種設(shè)置下是可以允許一些非法操作的,比如允許一些非法數(shù)據(jù)的插入。在生產(chǎn)環(huán)境必須將這個(gè)值設(shè)置為嚴(yán)格模式,所以開發(fā)、測(cè)試環(huán)境的數(shù)據(jù)庫(kù)也必須要設(shè)置,這樣
相關(guān)MySQL教程:
- MSSQL清空日志刪除日志文件
- 關(guān)于數(shù)據(jù)庫(kù)中保留小數(shù)位的問(wèn)題
- 解析mysql與Oracle update的區(qū)別
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)以及函數(shù)、存儲(chǔ)過(guò)程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現(xiàn)Can''t create/write to file ''#sql_5c0_0.MYD''的問(wèn)題
- 深入理解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可解決
- 淺析一個(gè)MYSQL語(yǔ)法(在查詢中使用count)的兼容性問(wèn)題
- 解析MySQL中INSERT INTO SELECT的使用
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- 怎么重置mysql的自增列AUTO_INCREMENT初時(shí)值
- MySQL的安全問(wèn)題從安裝開始說(shuō)起
- 解決bash: mysql: command not found 的方法
- 解決MYSQL導(dǎo)入腳本數(shù)據(jù)中文亂碼
- 深入理解SQL的四種連接-左外連接、右外連接、內(nèi)連接、全連接
- mysql基本操作
- mysql5.6.10安裝詳細(xì)圖文教程
- mysql解決遠(yuǎn)程不能訪問(wèn)的二種方法
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)以及函數(shù)、存儲(chǔ)過(guò)程的介紹
- MySQL:數(shù)據(jù)庫(kù)知識(shí)點(diǎn)
猜你也喜歡看這些
- 數(shù)據(jù)類型的表達(dá)式轉(zhuǎn)換為另一種數(shù)據(jù)類型
- 解決sql server查詢速度慢11個(gè)方法
- 解析使用 SQL Server 數(shù)據(jù)庫(kù)查詢累計(jì)值的方法
- 探討SQL Server 2005.NET CLR編程
- 怎樣使用SQLServer數(shù)據(jù)庫(kù)查詢累計(jì)值
- 解析SQL Server 2005實(shí)現(xiàn)數(shù)據(jù)庫(kù)緩存依賴
- 關(guān)于避免在 PL/SQL 中使用嵌套游標(biāo)查詢
- 淺談SQL Server數(shù)據(jù)庫(kù)優(yōu)化經(jīng)驗(yàn)總結(jié)
- 淺談SQL判斷是否存在
- 比較SQL Server數(shù)據(jù)庫(kù)導(dǎo)入導(dǎo)出數(shù)據(jù)方式
- 相關(guān)鏈接:
- 教程說(shuō)明:
MySQL教程-MySQL查詢優(yōu)化:LIMIT 1避免全表掃描提高查詢效率。