日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL的Limit详解(转载)

發(fā)布時(shí)間:2025/3/21 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL的Limit详解(转载) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL的Limit詳解

  問(wèn)題:數(shù)據(jù)庫(kù)查詢語(yǔ)句,如何只返回一部分?jǐn)?shù)據(jù)?

?

Top子句

  TOP 子句用于規(guī)定要返回的記錄的數(shù)目。對(duì)于擁有數(shù)千條記錄的大型表來(lái)說(shuō),TOP 子句是非常有用的。

  在SQL Server數(shù)據(jù)庫(kù)中語(yǔ)法為:
    SELECT?TOP number|percent?column_name(s) FROM table_name

  但是并非所有的數(shù)據(jù)庫(kù)系統(tǒng)都支持 TOP 子句,比如Oracle和MySQL,它們有等價(jià)的語(yǔ)法。

  在Oracle數(shù)據(jù)庫(kù)中語(yǔ)法為:
    SELECT column_name(s) FROM table_name WHERE?ROWNUM <= number

  在MySQL數(shù)據(jù)庫(kù)中語(yǔ)法為:
    SELECT column_name(s) FROM table_name?LIMIT number

?

?MySQL的Limit子句

  Limit子句可以被用于強(qiáng)制 SELECT 語(yǔ)句返回指定的記錄數(shù)。Limit接受一個(gè)或兩個(gè)數(shù)字參數(shù)。參數(shù)必須是一個(gè)整數(shù)常量。如果給定兩個(gè)參數(shù),第一個(gè)參數(shù)指定第一個(gè)返回記錄行的偏移量,第二個(gè)參數(shù)指定返回記錄行的最大數(shù)目。

  //初始記錄行的偏移量是 0(而不是 1):
  mysql> SELECT * FROM table LIMIT 5,10;?//檢索記錄行6-15

  //為了檢索從某一個(gè)偏移量到記錄集的結(jié)束所有的記錄行,可以指定第二個(gè)參數(shù)為 -1:
  mysql> SELECT * FROM table LIMIT 95,-1;?// 檢索記錄行 96-last

  //如果只給定一個(gè)參數(shù),它表示返回最大的記錄行數(shù)目。換句話說(shuō),LIMIT n 等價(jià)于 LIMIT 0,n:
  mysql> SELECT * FROM table LIMIT 5;?????//檢索前 5 個(gè)記錄行

?

Limit的效率高?

  常說(shuō)的Limit的執(zhí)行效率高,是對(duì)于一種特定條件下來(lái)說(shuō)的:即數(shù)據(jù)庫(kù)的數(shù)量很大,但是只需要查詢一部分?jǐn)?shù)據(jù)的情況。
  高效率的原理是:避免全表掃描,提高查詢效率。

  比如:每個(gè)用戶的email是唯一的,如果用戶使用email作為用戶名登陸的話,就需要查詢出email對(duì)應(yīng)的一條記錄。
  SELECT * FROM t_user WHERE email=?;
  上面的語(yǔ)句實(shí)現(xiàn)了查詢email對(duì)應(yīng)的一條用戶信息,但是由于email這一列沒有加索引,會(huì)導(dǎo)致全表掃描,效率會(huì)很低。
  SELECT * FROM t_user WHERE email=? LIMIT 1;
  加上LIMIT 1,只要找到了對(duì)應(yīng)的一條記錄,就不會(huì)繼續(xù)向下掃描了,效率會(huì)大大提高。

?

Limit的效率低?

  在一種情況下,使用limit效率低,那就是:只使用limit來(lái)查詢語(yǔ)句,并且偏移量特別大的情況

  做以下實(shí)驗(yàn):
????? 語(yǔ)句1:
????????   select * from table limit 150000,1000;
  語(yǔ)句2:
????????   select * from table while id>=150000 limit 1000;
  語(yǔ)句1為0.2077秒;語(yǔ)句2為0.0063秒
  兩條語(yǔ)句的時(shí)間比是:語(yǔ)句1/語(yǔ)句2=32.968
??
  比較以上的數(shù)據(jù)時(shí),我們可以發(fā)現(xiàn)采用where...limit....性能基本穩(wěn)定,受偏移量和行數(shù)的影響不大,而單純采用limit的話,受偏移量的影響很大,當(dāng)偏移量大到一定后性能開始大幅下降。不過(guò)在數(shù)據(jù)量不大的情況下,兩者的區(qū)別不大。

  所以應(yīng)當(dāng)先使用where等查詢語(yǔ)句,配合limit使用,效率才高

  ps:在sql語(yǔ)句中,limt關(guān)鍵字是最后才用到的。以下條件的出現(xiàn)順序一般是:where->group by->having-order by->limit


附錄:OFFSET

  為了與 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
  經(jīng)常用到在數(shù)據(jù)庫(kù)中查詢中間幾條數(shù)據(jù)的需求
  比如下面的sql語(yǔ)句:
    ① selete * from testtable limit 2,1;
    ② selete * from testtable limit 2 offset 1;
  注意:
    1.數(shù)據(jù)庫(kù)數(shù)據(jù)計(jì)算是從0開始的
    2.offset X是跳過(guò)X個(gè)數(shù)據(jù),limit Y是選取Y個(gè)數(shù)據(jù)
    3.limit? X,Y? 中X表示跳過(guò)X個(gè)數(shù)據(jù),讀取Y個(gè)數(shù)據(jù)
  這兩個(gè)都是能完成需要,但是他們之間是有區(qū)別的:
    ①是從數(shù)據(jù)庫(kù)中第三條開始查詢,取一條數(shù)據(jù),即第三條數(shù)據(jù)讀取,一二條跳過(guò)
    ②是從數(shù)據(jù)庫(kù)中的第二條數(shù)據(jù)開始查詢兩條數(shù)據(jù),即第二條和第三條。

?

?轉(zhuǎn)載至https://www.cnblogs.com/acm-bingzi/p/msqlLimit.html

?

參考了以下鏈接:
[1]http://blog.csdn.net/tuenbotuenbo/article/details/7974909
[2]http://www.w3school.com.cn/sql/sql_top.asp
[3]http://www.server110.com/mysql/201310/2228.html
[4]http://www.cnblogs.com/yxnchinahlj/p/4096484.html

把每一件簡(jiǎn)單的事情做好,就是不簡(jiǎn)單;把每一件平凡的事情做好,就是不平凡!相信自己,創(chuàng)造奇跡~~

轉(zhuǎn)載于:https://www.cnblogs.com/andydlz/p/10230053.html

總結(jié)

以上是生活随笔為你收集整理的MySQL的Limit详解(转载)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。