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

      編輯Tag賺U幣

      推薦: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_mode
      author: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è)置,這樣

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