select與limit使用方法

2021-10-01 16:02:17 字數 2776 閱讀 1092

limit關鍵字可以接受乙個或者兩個引數,且這個引數需是整數常量,如果兩個引數,第乙個表示返回記錄行的偏移量,第二個表示返回記錄行最大的數目;乙個的數的話,預設初始記錄行為0。

基本用法:

簡單例項:

顯示5到10行的記錄,即查詢6行記錄

select * from tablename limit 4,6;

顯示第6行的記錄

select * from tablename limit 5,1;

查詢前n行記錄

select * from tablename limit n;

把錶通過降序排序,查詢前n行記錄(可理解成表中最大的n個數)

limit與子查詢子查詢的子查詢支援limit,不支援子查詢

select * from table where id in (select t.id from (select * from table limit 10)as t);

as表示名乙個別名

limit 優化

limit 0的使用:

根據limit關鍵字的定義,如果引數為0的話,則其返回的是空記錄。在實際工作中,靈活使用這個0引數,能夠給我們帶來很大的收穫。

想要確認一下某個查詢語句的有效性,如果直接執行這個查詢語句,需要等待其返回的記錄。如果涉及的紀錄數量比較多,或者運算邏輯比較複雜,那麼需要等到比較長的時間。此時就可以在select查詢語句中,使用limit 0子句。只要查詢語句沒有語法上的錯誤,這就可以讓資料庫快速的返回乙個空集合。從而幫助資料庫設計人員迅速的判斷查詢語句的有效性。另外這個空集和中還會返回某個表的各個欄位的欄位名稱。即通過這個limit 0子句還可以查詢某個表的表結構

可見靈活應用limit 0子句,確實能夠給我們帶來不小的收益。不過需要注意的是,在某些特定的場合下,這個子句可能不會奏效。如通常情況下,在monitor工作環境中不支援這個limit 0子句。此時結果只會顯示empty set,而不是我們所需要的結果。

limit與distinct

distinct關鍵字主要用來過濾重複的記錄。而limit關鍵字則主要用來指定記錄所返回的行數。這兩個關鍵字共同使用時,如limit的引數為50,則資料庫返回50條不重複的記錄數。然後後續的查詢就會停止。如果查詢的記錄中有重覆記錄,則資料庫查詢的實際數量往往要比limit關鍵字所指定的數量要多

mysql的limit給分頁帶來了極大的方便,但資料量一大的時候,limit的效能就急劇下降。在資料量大的時候建議使用子查詢優化

limit與索引

如果資料庫管理員決定使用limit子句來指定需要顯示的記錄數,那麼最好能夠最大限度的使用索引,以避免全表掃瞄,提高工作效率。即當資料庫選擇做完整的表掃瞄時,可以在某些情況下使用索引。

如現在資料庫管理員決定將limit子句與order by子句一起使用。資料庫一旦找到了排序結果的第乙個rowcount行,則系統將會結束排序,而並不會對整個表進行排序。如果單獨使用order by子句的話,則會對整個表進行排序。雖然如此,但是排序必定要浪費一定的時間。此時資料庫管理員如果決定使用索引,則可以在很大程度上提高這個查詢的效率。

limit與group by

group by關鍵字主要用來對資料進行分類彙總。不過在分類彙總之前,往往需要對資料先進性排序。而limit語句用來指定顯示的結果數量時,往往也需要涉及到紀錄的分類彙總與排序的問題。如現在乙個學校成績管理系統中,需要對學生的總分進行排序。即先對學生各科成績進行彙總,然後顯示其排名為前50的紀錄。此時就需要同時用到group by子句和limit子句。其實從這個案例中我們也可以看出,這兩個子句相互依賴的特性。正是因為這種特性(經常相互結合使用),為此結合group by子句可以提高limit的查詢效率。

這主要是因為兩者如果一起使用的話,limit關鍵字將不會再重複計算任何不必要的group by的值。換句話說,在某些情況下,group by子句能夠通過順序來讀取鍵或者在鍵上做排序來解決分類彙總時的排序問題,然後再計算摘要直到關鍵字的值的改變為止。如此的話,兩個子句所需要做的一些共同性的工作,只要做一次即可。這就可以從另外一次角度用來提高應用系統的效能。相比先做乙個檢視對資料進行分類彙總的運算,再使用乙個查詢語句來抽取特定數量的記錄,效率就要高一點。因為後者是將兩個子句分開來使用,就無法享受到結合使用所體現的優勢。

LIMIT與OFFSET的使用

limit 與 offset 從下標0開始 offset x 是跳過x個資料 limit y 是選取y個資料 limit x,y 中x表示跳過x個資料,讀取y個資料 例如 select from table limit 2,1 跳過2個資料,讀取1個資料 常與order by使用 如,select ...

LIMIT與OFFSET的使用

limit 與 offset 從下標0開始 offset x 是跳過x個資料 limit y 是選取y個資料 limit x,y 中x表示跳過x個資料,讀取y個資料 例如 select from table limit 2,1 跳過2個資料,讀取1個資料 常與order by使用 如,select ...

update與limit 關鍵字使用

更新前30行的某個字段內容,沒什麼問題。更新從20行到30行的某個欄位的內容,這樣會報錯。這樣就能實現更新表中根據id公升序排序的第20條到第30條資料的某個欄位的內容 注意 如果這樣的話也是不行的 update tb name set column name test where id in se...