电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SELECT * 效率低原理解析

瀏覽:140日期:2023-02-18 16:43:17
目錄
  • 效率低的原因
  • 索引知識延申
  • 聯(lián)合索引的優(yōu)勢
    • 1) 減少開銷
    • 2)覆蓋索引
    • 3)效率高
    • 4)索引是建的越多越好嗎

效率低的原因

無論在工作還是面試中,關于SQL中不要用“SELECT *”,都是大家聽爛了的問題,雖說聽爛了,但普遍理解還是在很淺的層面,并沒有多少人去追根究底,探究其原理。

先看一下最新《阿里java開發(fā)手冊(泰山版)》中 MySQL 部分描述:

【強制】在表查詢中,一律不要使用 * 作為查詢的字段列表,需要哪些字段必須明確寫明。說明:

  • 增加查詢分析器解析成本。
  • 增減字段容易與 resultMap 配置不一致。
  • 無用字段增加網(wǎng)絡 消耗,尤其是 text 類型的字段。

開發(fā)手冊中比較概括的提到了幾點原因,讓我們深入一些看看:

1. 不需要的列會增加數(shù)據(jù)傳輸時間和網(wǎng)絡開銷

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

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

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

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

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

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

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

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

由于輔助索引的數(shù)據(jù)比聚集索引少很多,很多情況下,通過輔助索引進行覆蓋索引(通過索引就能獲取用戶需要的所有列),都不需要讀磁盤,直接從內(nèi)存取,而聚集索引很可能數(shù)據(jù)在磁盤(外存)中(取決于buffer pool的大小和命中率),這種情況下,一個是內(nèi)存讀,一個是磁盤讀,速度差異就很顯著了,幾乎是數(shù)量級的差異。

索引知識延申

上面提到了輔助索引,在MySQL中輔助索引包括單列索引、聯(lián)合索引(多列聯(lián)合),單列索引就不再贅述了,這里提一下聯(lián)合索引的作用。

聯(lián)合索引 (a,b,c)

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

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

聯(lián)合索引的優(yōu)勢

1) 減少開銷

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

2)覆蓋索引

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

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

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

3)效率高

索引列多,通過聯(lián)合索引篩選出的數(shù)據(jù)越少。比如有 1000W 條數(shù)據(jù)的表,有如下SQL:

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

假設:假設每個條件可以篩選出 10% 的數(shù)據(jù)。

  • A. 如果只有單列索引,那么通過該索引能篩選出 1000W 10%=100w 條數(shù)據(jù),然后再回表從 100w 條數(shù)據(jù)中找到符合 col2=2 and col3= 3 的數(shù)據(jù),然后再排序,再分頁,以此類推(遞歸);
  • B. 如果是(col1,col2,col3)聯(lián)合索引,通過三列索引篩選出 1000w 10% 10% *10%=1w,效率提升可想而知!

4)索引是建的越多越好嗎

答案自然是否定的

  • 數(shù)據(jù)量小的表不需要建立索引,建立會增加額外的索引開銷
  • 不經(jīng)常引用的列不要建立索引,因為不常用,即使建立了索引也沒有多大意義
  • 經(jīng)常頻繁更新的列不要建立索引,因為肯定會影響插入或更新的效率
  • 數(shù)據(jù)重復且分布平均的字段,因此他建立索引就沒有太大的效果(例如性別字段,只有男女,不適合建立索引)
  • 數(shù)據(jù)變更需要維護索引,意味著索引越多維護成本越高。
  • 更多的索引也需要更多的存儲空間

以上就是SELECT * 效率低原理解析的詳細內(nèi)容,更多關于SELECT * 效率低原理的資料請關注其它相關文章!

標簽: MySQL
主站蜘蛛池模板: 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 游泳池设计|设备|配件|药品|吸污机-东莞市太平洋康体设施有限公司 | 纸箱网 -纸箱机械|设备|包装纸盒|包装印刷行业门户网站 | 破碎机锤头_合金耐磨锤头_郑州宇耐机械工程技术有限公司 | 健康管理师报名入口,2025年健康管理师考试时间信息网-网站首页 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 云杂志网-学术期刊-首页| LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 2025第九届世界无人机大会| 通用磨耗试验机-QUV耐候试验机|久宏实业百科 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 打包钢带,铁皮打包带,烤蓝打包带-高密市金和金属制品厂 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | 清水-铝合金-建筑模板厂家-木模板价格-铝模板生产「五棵松」品牌 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 杭州网络公司_百度SEO优化-外贸网络推广_抖音小程序开发-杭州乐软科技有限公司 | 动力配电箱-不锈钢配电箱-高压开关柜-重庆宇轩机电设备有限公司 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 上海诺狮景观规划设计有限公司 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 深圳市万色印象美业有限公司| 照相馆预约系统,微信公众号摄影门店系统,影楼管理软件-盟百网络 | 自动钻孔机-全自动数控钻孔机生产厂家-多米(广东)智能装备有限公司 | 制样机-密封锤式破碎机-粉碎机-智能马弗炉-南昌科鑫制样 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | b2b网站大全,b2b网站排名,找b2b网站就上地球网 | 酶联免疫分析仪-多管旋涡混合仪|混合器-莱普特科学仪器(北京)有限公司 | 减速机_上海宜嘉减速机 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 培训无忧网-教育培训咨询招生第三方平台 |