使用limit效率的問題和優化

2021-07-22 23:56:15 字數 1946 閱讀 2380

limit用來返回select語句的行數。limit取1個或2個數字引數,如果給定2個引數,第乙個指定要返回的第一行的偏移量,第二個指定返回行的最大數目。初始行的偏移量是0(不是1)。

limit在可以很方便的返回所需的資料,資料量小(10w以下)時,效率這方面不會有太大的問題,但資料量一大就會導致效能的下降。下面是我的測試資料:都是在20w條記錄的資料表中執行

例項:stockout_order 表中共有350w的資料,分別查詢第3k條資料和第30w條。

當資料量大於10w時,

mysql> select count(1) from stockout_order;

+----------+

| count(1) |

+----------+

| 3545570 |

+----------+

1 row in set (0.54 sec)

select stockout_no from stockout_order limit 3000,1;

mysql> select stockout_no from stockout_order limit 3000,1;

+----------------+

| stockout_no |

+----------------+

| ck201409213726 |

+----------------+

1 row in set (0.00 sec)

select stockout_no from stockout_order where stockout_id >=3000 limit 1;

mysql> select stockout_no from stockout_order where stockout_id >=3000 limit 1;

+----------------+

| stockout_no |

+----------------+

| ck201409202895 |

+----------------+

1 row in set (0.01 sec)

select stockout_no from stockout_order limit 3000000,1;

mysql> select stockout_no from stockout_order limit 3000000,1;

+---------------+

| stockout_no |

+---------------+

| ck20150803580 |

+---------------+

1 row in set (2.06 sec)

select stockout_no from stockout_order where stockout_id >3000000 limit 1;

mysql> select stockout_no from stockout_order where stockout_id >=3000000 limit 1;

+----------------+

| stockout_no  |

+----------------+

| ck201508022484 |

+----------------+

1 row in set (0.01 sec)

比較以上的資料時,我們可以發現採用where...limit....效能基本穩定,受偏移量和行數的影響不大,而單純採用limit的話,受偏移量的影響很大,當偏移量大到一定後效能開始大幅下降。不過在資料量不大的情況下,兩者的區別不大,使用哪種就是個人的興趣了。

order by和limit結合使用的問題

在mysql中我們常常用order by來進行排序,使用limit來進行分頁,當需要先排序後分頁時我們往往使用類似的寫法select from 表名 order by 排序字段 limt m,n。但是這種寫法卻隱藏著較深的使用陷阱。在排序欄位有資料重複的情況下,會很容易出現排序結果與預期不一致的問題...

Mysql查詢使用Limit優化

在某些情況下,如果明知道查詢結果只有乙個,sql語句中使用limit 1會提高查詢效率,感興趣的朋友可以了解下哈,希望對你優化mysql查詢有所幫助 在某些情況下,如果明知道查詢結果只有乙個,sql語句中使用limit 1會提高查詢效率。例如下面的使用者表 主鍵id,郵箱,密碼 複製 如下 crea...

使用Limit引數優化MySQL查詢

我們在做一些查詢的時候總希望能避免資料庫引擎做全表掃瞄,因為全表掃瞄時間長,而且其中大部分掃瞄對客戶端而言是沒有意義的。那麼在 mysql 中有那些方式是可以避免全表掃面的呢?除了我們大家很熟悉的通過使用索引列或分割槽等方式來進行查詢的優化之外還有那些呢?在我們使用查詢語句的時候,經常要返回前幾條或...