日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL 优化 —— WHERE 子句优化

發布時間:2025/3/12 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 优化 —— WHERE 子句优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

本文翻譯自 MySQL 官網:WHERE Clause Optimization

WHERE 子句優化

這一部分我們來討論對 WHERE 子句的優化處理。本部分的案例都是以 SELECT 語句為例,但這些優化同樣適用于 DELETE 和 UPDATE 語句中的 WHERE 子句。

注意

因為對 MySQL 優化器的工作一直在進行,因此并不是全部的MySQL執行優化都在本文檔中說明。

你可能想重寫你的查詢以使它在算法操作上執行的更快,同時犧牲一定的可讀性。但你通??梢圆槐剡@么費勁,因為MySQL 會自動進行類似的優化,同時保留查詢的可讀性和可維護性。下面一些是MySQL自己的優化:

  • 移除不必要的圓括號
((a AND b) AND c OR (((a AND b) AND (c AND d)))) -> (a AND b AND c) OR (a AND b AND c AND d)
  • 常量合并
(a<b AND b=c) AND a=5 -> b>5 AND b=c AND a=5
  • 常量條件刪除
(b>=5 AND b=5) OR (b=6 AND 5=5) OR (b=7 AND 5=6) -> b=5 OR b=6
  • 被索引使用的常量表達式只會計算一次
  • 單表的 COUNT(*) ,在沒有 WHERE 子句的情況下可以直接從表信息中獲得,但只針對 MyISAM 和 MEMORY 存儲引擎。對于僅與一個表一起使用的任何NOT NULL表達式,也可以這樣做。
  • 早期檢測無效的常量表達式。MySQL 會快速地檢測到一些根本不可能的 SELECT 語句,并直接返回空的結果集。
  • 如果你不使用 GROUP BY 或聚合函數(COUNT(),MIN()等),HAVING 子句會被合并到 WHERE 中。
  • 對于連接中的每張表,MySQL會構建更簡單的 WHERE ,以此來獲取每張表的快捷 WHERE 子句處理,同時盡可能快的跳過記錄。
  • 所有的常量表會先于其他表的查詢。下面所列都是常量表(其實博主認為這里應該翻譯為“常量查詢”更恰當一些):
  • 空表或只有一條記錄的表。
  • 使用了 primary key?或者 unique key 作為 WHERE 查詢條件的查詢,并且條件都是等值判斷,且所有索引列都是定義為非空的。(博主:因為主鍵、唯一鍵都可能是多列復合,所以這里要求每個索引列都必須的非空)。下面的表都被視為常量表:
  • SELECT * FROM t WHERE primary_key=1; SELECT * FROM t1,t2WHERE t1.primary_key=1 AND t2.primary_key=t1.id;
    • 通過嘗試所有可能性,可以找到連接表的最佳連接組合。如果所有的 ORDER BY 和 GROUP BY子句中的字段都來自同一個表,那么這個表在連接時就作為第一張表。
    • 如果有一個 ORDER BY 子句和一個不同的 GROUP BY 子句,或者?ORDER BY 或 GROUP BY 包含的列不屬于連接隊列中的第一張表,那么MySQL就會建立一張臨時表。
    • 如果你使用 SQL_SMALL_RESULT 修飾符,MySQL 會使用一張內存中的臨時表。
    • 每張表的索引都會被查詢,并會使用最優索引,除非MySQL優化器認為全表掃描比用索引更高效。曾經,掃描的使用基于是否最優索引覆蓋超過了表數據的 30 % ,但是,固定的百分比不再作為使用索引或掃描的決定因素。如今的優化器更加復雜,它對優化的計算基于更多額外的因素,比如表的大小,記錄的數量,以及 IO 塊的大小。?
    • 有些情況,MySQL 甚至不需要訪問數據文件就可以從索引中讀取記錄。如果索引中所有的列都是數值型的,那么只用索引樹就可以完成查詢。
    • 每條記錄輸出之前,那些不匹配 HAVING 子句條件的記錄會被跳過。

    下面一些查詢例子都是非??焖俚?#xff1a;

    SELECT COUNT(*) FROM tbl_name;SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;SELECT MAX(key_part2) FROM tbl_nameWHERE key_part1=constant;SELECT ... FROM tbl_nameORDER BY key_part1,key_part2,... LIMIT 10;SELECT ... FROM tbl_nameORDER BY key_part1 DESC, key_part2 DESC, ... LIMIT 10;

    下面的查詢,MySQL只會用到索引樹,假設創建了索引的列都是數值型的:

    SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;SELECT COUNT(*) FROM tbl_nameWHERE key_part1=val1 AND key_part2=val2;SELECT key_part2 FROM tbl_name GROUP BY key_part1;

    以下查詢使用索引來檢索排序的行,而不需要單獨的排序傳遞:

    SELECT ... FROM tbl_nameORDER BY key_part1,key_part2,... ;SELECT ... FROM tbl_nameORDER BY key_part1 DESC, key_part2 DESC, ... ;

    總結

    從本文可以看出,MySQL官方給出了一些 MySQL 優化器內部對于查詢的優化處理,對于開發者的優化建議雖然沒有明確指出,但是我們可以通過分析這些來自優化器內部的操作來定制我們的SQL查詢。這些知識可以作為我們日后采取更具體優化措施的原理基礎。

    總結

    以上是生活随笔為你收集整理的MySQL 优化 —— WHERE 子句优化的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲视频一区二区三区 | 一级女人毛片 | 欧美人妖老妇 | 国产欧美在线视频 | 99热国产在线观看 | 超碰在线9| 国产一区激情 | 国产成人精品一区二区在线小狼 | 亚洲综合在 | 男女在楼梯上高潮做啪啪 | 国产精品入口夜色视频大尺度 | 97在线超碰 | 亚洲成人中文字幕在线 | aa一级黄色片 | 黄页视频在线观看 | 欧美噜噜噜 | 色网导航站 | 国产一区 在线播放 | 97久久久久 | 综合色导航 | 日本黄色一级 | 精品国模 | 国产午夜精品在线 | 红桃视频国产 | 欧美日韩五月天 | 凹凸精品熟女在线观看 | 亚洲天堂av一区二区 | 在线不卡中文字幕 | 色涩网站 | 肉丝袜脚交视频一区二区 | 禁漫天堂黄漫画无遮挡观看 | 欧美人与性动交α欧美精品 | 日日骚一区 | av片观看 | 操操操操操操操操操操 | 综合激情伊人 | 国产丝袜久久 | 玖玖玖在线观看 | 一区二区三区在线免费 | caoporn视频在线观看 | 日本免费爱爱视频 | 中文字幕一区二区三三 | 国产精品视频在线免费观看 | 亚洲AV无码成人精品区先锋 | 久久久久影视 | 综合热久久 | 亚洲爱 | 黄色成人在线观看 | 六月丁香久久 | 欧美日韩久久婷婷 | 男操女免费网站 | 亚洲欧美日本在线观看 | 狠狠干老司机 | 成人国产综合 | 少妇一级淫片免费 | 伊人网站在线观看 | 一区二区视频在线观看 | 99精品国产成人一区二区 | 欧美高h | 国产aaaaaa | 大屁股一区二区三区 | 欧美熟妇精品一区二区蜜桃视频 | 免费99精品国产自在在线 | 嫩草嫩草嫩草嫩草嫩草嫩草 | av在线有码 | 97av视频 | 狠狠看 | 小sao货水好多真紧h无码视频 | 国产成a人亚洲精品 | 超碰123 | 国产乱淫视频 | 亚洲一区二区三区四区av | caopeng视频 | 国产欧美在线观看 | 精品人妻二区中文字幕 | 夜夜嗨老熟女av一区二区三区 | 亚洲激情在线观看 | 天天看天天爽 | 深夜成人在线 | 激情av在线播放 | 九九少妇 | 被灌满精子的波多野结衣 | 国产香蕉在线观看 | 日日射视频 | ,一级淫片a看免费 | 欧美日韩综合在线观看 | 全部免费毛片在线播放 | 天天操夜夜操夜夜操 | 麻豆一区二区三区在线观看 | 黑人黄色大片 | 欧美拍拍视频 | 国产sm调教视频 | 欧美日b片 | av第一福利大全导航 | 91久久精品日日躁夜夜躁国产 | 国产精品久久久久久久久久久久久久久久久久 | 国产wwwxxx | 大吊一区二区三区 | 四虎永久在线精品免费一区二区 |