[MySQL] 效能調教 - 取代 offset

更新於 發佈於 閱讀時間約 3 分鐘
代替 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%’ 時索引無效
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
HeidiSQL 是一套免費、開源的MySQL GUI 管理工具 https://www.heidisql.com/ 從前我們用來管理 MySQL 資料庫都會用 phpMyAdmin,也就是還要再開一個瀏覽器頁面來管理 MySQL ,雖然 phpMyAdmin 很好用,但用 php 網頁來管理
Thumbnail
MySQL(MariaDB)是一套非常流行的資料庫系統,因為它開源、免費,幾乎是每一個人架站者的首選資料庫。 Microsoft Excel 更不用說,它是辦公室必備神器,老闆愛用來看報表,所以工程師們一定要會使用它。 今天我們要把 Excel資料寫入MySQL,除了用MySQL的一些管理軟體外
Thumbnail
※ 何時該使用 JOIN? JOIN 使用的時機是:當你需要同時查詢一張以上的資料表的時候。 ※ SQL有哪些TABLE JOIN的方式? INNER JOIN LEFT JOIN RIGHT JOIN SELF JOIN ※ 使用 JOIN 的時候,我們需要考慮到: 我要使用哪一種
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 什麼是ORDER BY? 可以讓SELECT出來的結果,根據你想要的方式排序。簡單說,用於對查詢結果進行排序。 ※ 語法: SELECT select_list FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC]
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
如果MySQL忘記密碼,可以使用修改cnf檔案免去登入驗證,再進入MySQL重新設定密碼的方式,找回密碼,另外還附上有一般修改密碼的方式。
Thumbnail
本篇文章將會說明如何在Linux中使用RPM離線安裝MySQL。
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
HeidiSQL 是一套免費、開源的MySQL GUI 管理工具 https://www.heidisql.com/ 從前我們用來管理 MySQL 資料庫都會用 phpMyAdmin,也就是還要再開一個瀏覽器頁面來管理 MySQL ,雖然 phpMyAdmin 很好用,但用 php 網頁來管理
Thumbnail
MySQL(MariaDB)是一套非常流行的資料庫系統,因為它開源、免費,幾乎是每一個人架站者的首選資料庫。 Microsoft Excel 更不用說,它是辦公室必備神器,老闆愛用來看報表,所以工程師們一定要會使用它。 今天我們要把 Excel資料寫入MySQL,除了用MySQL的一些管理軟體外
Thumbnail
※ 何時該使用 JOIN? JOIN 使用的時機是:當你需要同時查詢一張以上的資料表的時候。 ※ SQL有哪些TABLE JOIN的方式? INNER JOIN LEFT JOIN RIGHT JOIN SELF JOIN ※ 使用 JOIN 的時候,我們需要考慮到: 我要使用哪一種
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 什麼是ORDER BY? 可以讓SELECT出來的結果,根據你想要的方式排序。簡單說,用於對查詢結果進行排序。 ※ 語法: SELECT select_list FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC]
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
Thumbnail
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
如果MySQL忘記密碼,可以使用修改cnf檔案免去登入驗證,再進入MySQL重新設定密碼的方式,找回密碼,另外還附上有一般修改密碼的方式。
Thumbnail
本篇文章將會說明如何在Linux中使用RPM離線安裝MySQL。