千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > SELECT * 效率低的原因是什么?

SELECT * 效率低的原因是什么?

來源:千鋒教育
發布人:xqq
時間: 2023-10-13 02:29:17 1697135357

一、SELECT * 效率低的原因

1. 不需要的列會增加數據傳輸時間和網絡開銷

用“SELECT * ”數據庫需要解析更多的對象、字段、權限、屬性等相關內容,在 SQL 語句復雜,硬解析較多的情況下,會對數據庫造成沉重的負擔。增大網絡開銷;* 有時會誤帶上如log、IconMD5之類的無用且大文本字段,數據傳輸size會幾何增漲。如果DB和應用程序不在同一臺機器,這種開銷非常明顯即使 mysql 服務器和客戶端是在同一臺機器上,使用的協議還是 tcp,通信也是需要額外的時間。

2. 對于無用的大字段,如 varchar、blob、text,會增加 io 操作

準確來說,長度超過 728 字節的時候,會先把超出的數據序列化到另外一個地方,因此讀取這條記錄會增加一次 io 操作。(MySQL InnoDB)

3. 失去MySQL優化器“覆蓋索引”策略優化的可能性

SELECT * 杜絕了覆蓋索引的可能性,而基于MySQL優化器的“覆蓋索引”策略又是速度極快,效率極高,業界極為推薦的查詢優化方式。

例如,有一個表為t(a,b,c,d,e,f),其中,a為主鍵,b列有索引。

那么,在磁盤上有兩棵 B+ 樹,即聚集索引和輔助索引(包括單列索引、聯合索引),分別保存(a,b,c,d,e,f)和(a,b),如果查詢條件中where條件可以通過b列的索引過濾掉一部分記錄,查詢就會先走輔助索引,如果用戶只需要a列和b列的數據,直接通過輔助索引就可以知道用戶查詢的數據。

如果用戶使用select *,獲取了不需要的數據,則首先通過輔助索引過濾數據,然后再通過聚集索引獲取所有的列,這就多了一次b+樹查詢,速度必然會慢很多。

延伸閱讀:

二、聯合索引 (a,b,c)

聯合索引 (a,b,c) 實際建立了 (a)、(a,b)、(a,b,c) 三個索引。

我們可以將組合索引想成書的一級目錄、二級目錄、三級目錄,如index(a,b,c),相當于a是一級目錄,b是一級目錄下的二級目錄,c是二級目錄下的三級目錄。要使用某一目錄,必須先使用其上級目錄,一級目錄除外。

聯合索引的優勢

1) 減少開銷

建一個聯合索引 (a,b,c) ,實際相當于建了 (a)、(a,b)、(a,b,c) 三個索引。每多一個索引,都會增加寫操作的開銷和磁盤空間的開銷。對于大量數據的表,使用聯合索引會大大的減少開銷!

2)覆蓋索引

對聯合索引 (a,b,c),如果有如下 sql 的,

?

SELECT a,b,c from table where a=’xx’ and b = ‘xx’;

那么 MySQL 可以直接通過遍歷索引取得數據,而無需回表,這減少了很多的隨機 io 操作。減少 io 操作,特別是隨機 io 其實是 DBA 主要的優化策略。所以,在真正的實際應用中,覆蓋索引是主要的提升性能的優化手段之一。

3)效率高

索引列多,通過聯合索引篩選出的數據越少。比如有 1000W 條數據的表,有如下SQL:

?

select col1,col2,col3 from table where col1=1 and col2=2 and col3=3;

復制

假設:假設每個條件可以篩選出 10% 的數據。

A. 如果只有單列索引,那么通過該索引能篩選出 1000W10%=100w 條數據,然后再回表從 100w 條數據中找到符合 col2=2 and col3= 3 的數據,然后再排序,再分頁,以此類推(遞歸);B. 如果是(col1,col2,col3)聯合索引,通過三列索引篩選出 1000w10% 10% *10%=1w,效率提升可想而知。
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
久久亚洲中文字幕精品一区四,亚洲日本另类欧美一区二区,久久久久久久这里只有免费费精品,高清国产激情视频在线观看
欧美、日本v视频在线播放 亚洲国产一区二区三区啪 一区二图三区国产精品 | 日韩精品在线视频 | 亚洲精品欧美在线综合国 | 伊人色综合久久天天人手人婷 | 亚洲精品A在线观看 | 亚洲国产手机电影在 |