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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql分页查询减轻压力_mysql分页查询优化

發布時間:2023/12/13 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql分页查询减轻压力_mysql分页查询优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在實際的項目中,分頁查詢是在尋常不過的,甚至說不可避免的。通常數據量較少的時候,很難遇到效率的影響。但是當數據量較大時,一個普通的分頁sql能讓你惡心到家。

我們常用的分頁sql如下:

1 SELECT * FROM table_name LIMIT 20 OFFSET 10;

這個sql不會耗時很久,因為偏移量offset很小,但是當offset很大時,這個sql的執行時間完全超乎你的想象,網上有很多測試的例子,這里不再復制粘貼。另外一個因素就是我們在查詢數據的時候,通常不會查詢過多的頁數,一般也就看幾頁而已,所以不會出現這樣的問題。所以寫這篇博客的目的不是為了解決問題,而是希望能夠養成一個好習慣,分頁的sql到底該怎么寫。

這里說一個額外的話,很多新人一直不理解,建表的時候為什么一定要有主鍵id,如果僅僅是為了非空唯一,完全可以自定義一個非空唯一的字段。mysql會為主鍵添加一個主鍵的索引,這個索引在查詢數據的時候很有幫助,所以最好為你的表添加主鍵。這里我們也用主鍵來解決這個問題。

推薦方式1:

1 SELECT * FROM table_name t1 JOIN (SELECT id FROM table_name ORDER BY id LIMIT 10 OFFSET 200) t2 ON t1.id = t2.id

將分頁的壓力通過主鍵的索引來解決,在子查詢中完成分頁條件。

推薦方式2:

1 SELECT * FROM table_name WHERE id >= (SELECT id FROM table_name ORDER BY id LIMIT 1 OFFSET 200) LIMIT 10

依然是將分頁的壓力通過主鍵索引來解決,可見主鍵的重要性。我這里的id是bigint自增的,所以可以用>=來判斷,如果是字符串,改成IN即可。不過不推薦字符串作為id,而且IN的效率也一般般,考慮方式1不錯。

這里著重說一下,為什么子查詢要有order by,網上很多例子都沒有的。select * from table_name limit 1返回的是數據庫的第一條數據,但是select id from table_name limit 1未必返回的是第一條數據,id未必是最小的。默認的排序規則應該與查詢結果有關系,這里也僅僅是猜測而已,建議limit還是與order by一起用更好一些。

這里沒有講什么技術,只是一個小小的技巧而已,希望以后寫分頁的時候能夠采用這兩種方式,避免最原始的。良好的習慣會為你避免很多意想不到的問題!

總結

以上是生活随笔為你收集整理的mysql分页查询减轻压力_mysql分页查询优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。