[MySQL] 效能調教 - 取代 offset

更新於 發佈於 閱讀時間約 4 分鐘

代替 offset


更快方式

id 篩選

select id, name, phone_number,

create_time, update_time, status

from member

WHERE id >= (SELECT id FROM member WHERE id = 157

order by id desc limit 0 ,1) LIMIT 10000

inner join 方式

select t.id, t.name, t.phone_number,

t.create_time,

t.update_time, t.status

FROM (SELECT id FROM member

WHERE id = 157

order by id desc limit 10000 offset 0) q JOIN member t ON t.id = q.id;

---------

合理的建立索引的建議:

(1) 越小的資料型別通常更好:越小的資料型別通常在磁碟、記憶體和 CPU 快取中都需要更少的空間,處理起來更快。

(2) 簡單的資料型別更好:整型資料比起字元,處理開銷更小,因為字串的比較更復雜。在 MySQL 中,應該用內建的日期和時間資料型別,而不是用字串來儲存時間;以及用整型資料型別儲存 IP 地址。

(3) 儘量避免 NULL:應該指定列為 NOT NULL,除非你想儲存 NULL。在 MySQL 中,含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計資訊以及比較運算更加複雜。你應該用 0、一個特殊的值或者一個空串代替空值

這部分是關於索引和寫 SQL 語句時應當注意的一些瑣碎建議和注意點。

1. 當結果集只有一行資料時使用 LIMIT 1

2. 避免 SELECT *,始終指定你需要的列

從表中讀取越多的資料,查詢會變得更慢。他增加了磁碟需要操作的時間,還是在資料庫伺服器與 WEB 伺服器是獨立分開的情況下。你將會經歷非常漫長的網路延遲,僅僅是因為資料不必要的在伺服器之間傳輸。

3. 使用連線(JOIN)來代替子查詢 (Sub-Queries)

連線(JOIN).. 之所以更有效率一些,是因為 MySQL 不需要在記憶體中建立臨時表來完成這個邏輯上的需要兩個步驟的查詢工作。

4. 使用 ENUM、CHAR 而不是 VARCHAR,使用合理的欄位屬性長度

5. 儘可能的使用 NOT NULL

6. 固定長度的表會更快

7. 拆分大的 DELETE 或 INSERT 語句

8. 查詢的列越小越快

Where 條件

在查詢中,WHERE 條件也是一個比較重要的因素,儘量少並且是合理的 where 條件是很重要的,儘量在多個條件的時候,把會提取儘量少資料量的條件放在前面,減少後一個 where 條件的查詢時間。

有些 where 條件會導致索引無效:

Ø where 子句的查詢條件裡有!=,MySQL 將無法使用索引。

Ø where 子句使用了 Mysql 函式的時候,索引將無效,比如:select * from tb where left (name, 4) = ‘xxx’

Ø 使用 LIKE 進行搜尋匹配的時候,這樣索引是有效的:select * from tbl1 where name like ‘xxx%’,而 like ‘% xxx%’ 時索引無效

留言
avatar-img
留言分享你的想法!
avatar-img
Alan & Jane的沙龍
0會員
4內容數
Alan & Jane的沙龍的其他內容
2021/11/09
當我們是一個API專案,我們可能會有 Swagger , 我們有Swagger之後,可能又是用  NJsonSchema NSwag.AspNetCore NSwag.Core 此時在我們的專案因為有了這三個存在,這是在今日時都還有的問題 我們會跳出錯誤, 偵測到 Microsofe
2021/11/09
當我們是一個API專案,我們可能會有 Swagger , 我們有Swagger之後,可能又是用  NJsonSchema NSwag.AspNetCore NSwag.Core 此時在我們的專案因為有了這三個存在,這是在今日時都還有的問題 我們會跳出錯誤, 偵測到 Microsofe
2021/01/10
簡單學會GraphQL基本操作
Thumbnail
2021/01/10
簡單學會GraphQL基本操作
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
假設資料如下: local DB裡面的test Collection SELECT SELECT可以這樣寫: 由於config/database.php中設定的default DB_CONNECTION是mysql,所以這邊特別指定使用mongodb connection。 回傳結果如下: 軟刪除
Thumbnail
假設資料如下: local DB裡面的test Collection SELECT SELECT可以這樣寫: 由於config/database.php中設定的default DB_CONNECTION是mysql,所以這邊特別指定使用mongodb connection。 回傳結果如下: 軟刪除
Thumbnail
如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但其實有個小技巧,可以讓 QUERY 更新得更輕鬆。來看看吧!
Thumbnail
如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但其實有個小技巧,可以讓 QUERY 更新得更輕鬆。來看看吧!
Thumbnail
S1.建立資料庫 user S2.建立 index.htm a.載入 vue.js、jquery、bootstrap b.版面建立 S3.vue.js程式 新增、查看列表、互動視窗、修改、刪除 index.htm VueControl.js 原碼:https://reurl.cc/e3k8yL
Thumbnail
S1.建立資料庫 user S2.建立 index.htm a.載入 vue.js、jquery、bootstrap b.版面建立 S3.vue.js程式 新增、查看列表、互動視窗、修改、刪除 index.htm VueControl.js 原碼:https://reurl.cc/e3k8yL
Thumbnail
QUERY,一個真的要隆重介紹的函式,真的很好用。一起從頭開始學這個強力的函式吧!
Thumbnail
QUERY,一個真的要隆重介紹的函式,真的很好用。一起從頭開始學這個強力的函式吧!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News