[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
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
※ 基本操作: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
QUERY,一個真的要隆重介紹的函式,真的很好用。一起從頭開始學這個強力的函式吧!
Thumbnail
QUERY,一個真的要隆重介紹的函式,真的很好用。一起從頭開始學這個強力的函式吧!
Thumbnail
如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但其實有個小技巧,可以讓 QUERY 更新得更輕鬆。來看看吧!
Thumbnail
如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但其實有個小技巧,可以讓 QUERY 更新得更輕鬆。來看看吧!
Thumbnail
假如開發了一個部落格,以下是ERD設計: 接著從程式碼來看如何join: $this->article ->join('comments', 'article.article_id', '=', 'comments.article_id') ->select('article.article_i
Thumbnail
假如開發了一個部落格,以下是ERD設計: 接著從程式碼來看如何join: $this->article ->join('comments', 'article.article_id', '=', 'comments.article_id') ->select('article.article_i
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
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
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News