【MySQL精通之路】查詢優化器的使用(8)-優化器提示

博主PS:優化器提示的作用就是你可以提示優化器使用什么優化策略。當然優化器只是被提示了,而不是必須按你的提示做出操作,它可以執行或者拒絕你的提示。所以它叫優化器提示,而不是優化器配置。

控制優化器策略的一種方法是設置優化器切換系統變量(見“可切換優化”)

此變量的更改會影響所有后續查詢的執行

為了以不同的方式影響一個查詢,有必要在每個查詢之前更改optimizer_switch

控制優化器的另一種方法是使用優化器提示,這些提示可以在單獨的語句中指定。

因為優化器提示是以每條語句為基礎應用的,所以它們提供了比使用optimizer_switch更精細的語句執行計劃控制

例如,您可以對語句中的一個表啟用優化,而對另一個表禁用優化語句中的提示優先于優化器開關標志。

SELECT /*+ NO_RANGE_OPTIMIZATION(t3 PRIMARY, f2_idx) */ f1FROM t3 WHERE f1 > 30 AND f1 < 33;
SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2 WHERE ...;
SELECT /*+ NO_ICP(t1, t2) */ * FROM t1 INNER JOIN t2 WHERE ...;
SELECT /*+ SEMIJOIN(FIRSTMATCH, LOOSESCAN) */ * FROM t1 ...;
EXPLAIN SELECT /*+ NO_ICP(t1) */ * FROM t1 WHERE ...;
SELECT /*+ MERGE(dt) */ * FROM (SELECT * FROM t1) AS dt;
INSERT /*+ SET_VAR(foreign_key_checks=OFF) */ INTO t2 VALUES(2);

這里描述的優化器提示不同于“索引提示”中描述的索引提示。

優化器提示和索引提示可以單獨使用,也可以一起使用。


1.Optimizer提示概述

優化器提示適用于不同的作用域級別:

全局:提示影響整個語句

查詢塊:提示影響語句中的特定查詢塊

表級別:提示影響查詢塊中的特定表

索引級別:提示影響表中的特定索引

下表總結了可用的優化器提示、它們影響的優化器策略以及它們應用的范圍。更多細節將在后面給出。

Hint NameDescriptionApplicable Scopes
BKA, NO_BKAAffects Batched Key Access join processingQuery block, table
BNL, NO_BNLPrior to MySQL 8.0.20: affects Block Nested-Loop join processing; MySQL 8.0.18 and later: also affects hash join optimization; MySQL 8.0.20 and later: affects hash join optimization onlyQuery block, table
DERIVED_CONDITION_PUSHDOWN, NO_DERIVED_CONDITION_PUSHDOWNUse or ignore the derived condition pushdown optimization for materialized derived tables (Added in MySQL 8.0.22)Query block, table
GROUP_INDEX, NO_GROUP_INDEXUse or ignore the specified index or indexes for index scans in GROUP BY operations (Added in MySQL 8.0.20)Index
HASH_JOIN, NO_HASH_JOINAffects Hash Join optimization (MySQL 8.0.18 onlyQuery block, table
INDEX, NO_INDEXActs as the combination of JOIN_INDEX, GROUP_INDEX, and ORDER_INDEX, or as the combination of NO_JOIN_INDEX, NO_GROUP_INDEX, and NO_ORDER_INDEX (Added in MySQL 8.0.20)Index
INDEX_MERGE, NO_INDEX_MERGEAffects Index Merge optimizationTable, index
JOIN_FIXED_ORDERUse table order specified in FROM clause for join orderQuery block
JOIN_INDEX, NO_JOIN_INDEXUse or ignore the specified index or indexes for any access method (Added in MySQL 8.0.20)Index
JOIN_ORDERUse table order specified in hint for join orderQuery block
JOIN_PREFIXUse table order specified in hint for first tables of join orderQuery block
JOIN_SUFFIXUse table order specified in hint for last tables of join orderQuery block
MAX_EXECUTION_TIMELimits statement execution timeGlobal
MERGE, NO_MERGEAffects derived table/view merging into outer query blockTable
MRR, NO_MRRAffects Multi-Range Read optimizationTable, index
NO_ICPAffects Index Condition Pushdown optimizationTable, index
NO_RANGE_OPTIMIZATIONAffects range optimizationTable, index
ORDER_INDEX, NO_ORDER_INDEXUse or ignore the specified index or indexes for sorting rows (Added in MySQL 8.0.20)Index
QB_NAMEAssigns name to query blockQuery block
RESOURCE_GROUPSet resource group during statement executionGlobal
SEMIJOIN, NO_SEMIJOINAffects semijoin strategies; beginning with MySQL 8.0.17, this also applies to antijoinsQuery block
SKIP_SCAN, NO_SKIP_SCANAffects Skip Scan optimizationTable, index
SET_VARSet variable during statement executionGlobal
SUBQUERYAffects materialization, IN-to-EXISTS subquery strategiesQuery block

禁用優化會阻止優化器使用它。啟用優化意味著如果策略應用于語句執行,優化器可以自由使用該策略而不是優化器必須使用它。

2.Optimizer提示語法

MySQL支持SQL語句中的注釋,如“注釋”所述。優化器提示必須在/**+…*/中指定評論。

也就是說,優化器提示使用/*…*/的變體C風格的注釋語法,在/*注釋開頭序列后面有一個+字符。示例:

/*+ BKA(t1) */
/*+ BNL(t1, t2) */
/*+ NO_RANGE_OPTIMIZATION(t4 PRIMARY) */
/*+ QB_NAME(qb2) */

+字符后面允許有空格。

解析器識別SELECT、UPDATE、INSERT、REPLACEDELETE語句的初始關鍵字之后的優化器提示注釋。在以下情況下允許提示:

在查詢和數據更改語句的開頭

SELECT /*+ ... */ ...
INSERT /*+ ... */ ...
REPLACE /*+ ... */ ...
UPDATE /*+ ... */ ...
DELETE /*+ ... */ ...

在查詢塊的開頭

(SELECT /*+ ... */ ... )
(SELECT ... ) UNION (SELECT /*+ ... */ ... )
(SELECT /*+ ... */ ... ) UNION (SELECT /*+ ... */ ... )
UPDATE ... WHERE x IN (SELECT /*+ ... */ ...)
INSERT ... SELECT /*+ ... */ ...

在以EXPLAIN開頭的暗示語句中。例如

EXPLAIN SELECT /*+ ... */ ...
EXPLAIN UPDATE ... WHERE x IN (SELECT /*+ ... */ ...)

這意味著您可以使用EXPLAIN來查看優化器提示如何影響執行計劃。在EXPLAIN之后立即使用SHOW WARNINGS查看提示的使用方式。

以下SHOW WARNINGS顯示的擴展EXPLAIN輸出指示使用了哪些提示。不顯示忽略的提示


?

提示注釋可以包含多個提示,但查詢塊不能包含多個暗示注釋。這是有效的:

SELECT /*+ BNL(t1) BKA(t2) */ ...

但這是無效的:

SELECT /*+ BNL(t1) */ /* BKA(t2) */ ...

當提示注釋包含多個提示時,可能存在重復和沖突。以下通用指南適用。對于特定的提示類型,可以應用附加規則,如提示描述中所示。

重復提示:對于/*+MRR(idx1)MRR(idx1)*/,MySQL使用第一個提示并發出關于重復提示的警告。

沖突提示:對于/*+ MRR(idx1) NO_MRR(idx1) */,MySQL使用第一個提示,并發出關于第二個沖突提示的警告。

查詢塊名稱是標識符,并遵循關于哪些名稱是有效的以及如何引用它們的常見規則

(請參閱“模式對象名稱”)。

提示名稱、查詢塊名稱和策略名稱不區分大小寫索引名稱的引用遵循通常的標識符大小寫敏感度規則(見第“標識符大小寫敏感性”)。

3.聯接順序優化器提示

未完待續。。。

4.表級優化器提示

5.索引級別優化器提示

6.子查詢優化器提示

7.語句執行時間優化器提示

8.變量設置提示語法

9.資源組提示語法

10.優化器命名查詢塊的提示

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13910.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13910.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13910.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

谷歌B端獨立站建站推廣,外貿建站訓練營,傻瓜式教學

做外貿方法重要&#xff0c;工具更重要&#xff0c;而這些背后的規則和套路&#xff0c;身邊的人往往不會告訴你&#xff0c;成功的人更不會教給你。本套課程主要內容包括&#xff1a;一套體系化的獨立站建站方法&#xff0c;學會“高效學習”避免無效努力&#xff0c;擁有獨立…

不閉合三維TSP:蛇優化算法SO求解不閉合三維TSP(起點固定,終點不定,可以更改數據集),MATLAB代碼

旅行商從城市1出發&#xff0c;終點城市由算法求解而定 部分代碼 close all clear clc global data load(data.txt)%導入TSP數據集 Dimsize(data,1)-1;%維度 lb-100;%下界 ub100;%上界 fobjFun;%計算總距離 SearchAgents_no100; % 種群大小&#xff08;可以修改&#xff09; …

k8s node NotReady后會發生什么?

K8s 是一種強大的容器編排和管理平臺&#xff0c;能夠高效地調度、管理和監控容器化應用程序&#xff1b;其本身使用聲明式語義管理著集群內所有資源模型、應用程序、存儲、網絡等多種資源&#xff0c;Node 本身又屬于 K8s 計算資源&#xff0c;上面承載運行著各種類型的應用程…

新零售數據中臺:構建零售業高效率、智能化的數據處理平臺_光點科技

隨著互聯網技術的快速發展和移動支付、大數據等技術的廣泛應用&#xff0c;零售行業已經逐漸從傳統零售向新零售模式轉變。在這個變革的時代背景下&#xff0c;新零售數據中臺應運而生&#xff0c;它作為零售行業數據資源的整合與智能分析的核心載體&#xff0c;成為推動零售行…

Batchnorm的主要作用

Batchnorm的主要作用 加速訓練&#xff1a;BatchNorm能夠使神經網絡訓練得更快更穩定。它通過調整每層網絡輸入的數據分布&#xff0c;使得網絡的訓練過程更高效。 穩定性&#xff1a;BatchNorm減少了不同批次數據之間的差異&#xff0c;使得模型訓練更加穩定&#xff0c;不容…

10最佳iPhone數據恢復軟件評論

您還在尋找最好的iPhone數據恢復軟件嗎&#xff1f; 似乎我們在iPhone上放置了越來越多與日常生活和工作有關的重要事情。照片可以保持珍貴的時刻&#xff0c;聯系人可以保持聯系&#xff0c;錄音&#xff0c;備忘錄和日歷可以作為提醒&#xff0c;視頻和歌曲可以娛樂&#xf…

Ethernet匯總

架構 Ethernet 匯總 Ethernet系統框架 stamac Ethernet DTS配置 Ethernet 模塊&通信 Uboot實現 uboot Ethernet初始化 uboot Ethernet 數據收發流程【1】

xml篇---提取VOC格式的坐標,并按照cameraID進行排序(二)

xml篇—提取VOC格式的坐標&#xff0c;并按照cameraID進行排序&#xff08;二&#xff09; import os import xml.etree.ElementTree as ETdef parse_xml(xml_file):tree ET.parse(xml_file)root tree.getroot()objects {}for obj in root.findall(object):name obj.find(…

升級openssl與python問題

1、下載與安裝 wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1t.tar.gz tar -zxvf openssl-1.1.1t.tar.gz cd openssl-1.1.1t/ ./config --prefix/usr/local/ssl make sudo make install 2、完成后添加軟鏈接 mv /usr/bin/openssl /usr/bin/oldope…

Flutter 中的 ExpandIcon 小部件:全面指南

Flutter 中的 ExpandIcon 小部件&#xff1a;全面指南 Flutter 提供了一系列的動畫圖標&#xff0c;ExpandIcon 就是其中之一&#xff0c;它用于表示一個可以展開或收起的內容區域。這個小部件通常用于實現折疊列表、手風琴菜單或其他類似的UI元素。本文將為您提供一個全面的指…

頭歌05-排列樹實驗-批處理作業調度

""" 題目&#xff1a;給定n個作業的集合{J1,J2,…,Jn}。每個作業必須先由機器1處理&#xff0c;然后由機器2處理。所有任務必須先由機器1處理完成后&#xff0c;才能由機器2處理&#xff0c;并且在機器2的處理順序必須與機器1的處理順序一致&#xff0c;處理順序…

【DevOps】深入淺出:Jenkins 性能監控全解析

目錄 一、監控指標&#xff1a;把握系統健康狀況 1、資源利用率&#xff1a; 2、 任務執行效率&#xff1a; 3、系統穩定性&#xff1a; 二、監控工具&#xff1a;選擇合適的利器 1、Jenkins 內置監控 1.1、Jenkins Performance Plugin&#xff1a;系統性能指標的直觀展…

Android Webview加載pdf文件無法縮放問題

WebView設置開啟頁面縮放&#xff1a; settings webView.getSettings(); settings.setSupportZoom(true); settings.setJavaScriptEnabled(true); settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setBuiltInZoomControls(true); sett…

CDN管理平臺安裝說明

CDN管理平臺安裝說明 系統需求 操作系統&#xff1a;Linux CPU不少于1核心 可用內存不少于1G 可用硬盤空間不小于10G 對于每日千萬訪問以上的CDN系統推薦配置如下&#xff1a; CPU不少于8核心 可用內存不少于8G 可用硬盤空間不小于200G 準備工作 在安裝GoEdge之前&#xff0…

kubernetes(k8s) v1.30.1 創建本地鏡像倉庫 使用本地docker鏡像倉庫部署服務 Discuz X3.5 容器搭建論壇

1 master11創建本地鏡像倉庫 [rootmaster11 ~]# docker run -d -p 5000:5000 --restartalways --name registry registry:2 Unable to find image registry:2 locally 2: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df…

Python 機器學習 基礎 之 數據表示與特征工程 【分類變量】的簡單說明

Python 機器學習 基礎 之 數據表示與特征工程 【分類變量】的簡單說明 目錄 Python 機器學習 基礎 之 數據表示與特征工程 【分類變量】的簡單說明 一、簡單介紹 二、數據表示與特征工程 數據表示 特征工程 三、分類變量 1、One-Hot編碼&#xff08;虛擬變量&#xff09…

漫談企業信息化安全-綜述

一、前言 一直以來想寫一些文章&#xff0c;談一談企業信息化過程中的安全問題及對策。 隨著信息技術的不斷發展和普及&#xff0c;特別是今年來移動辦公、云服務等等新的工作模式和新的信息技術的應用&#xff0c;企業信息化已經成為提升競爭力、促進創新和發展的重要途徑。…

websocket聊天(全源碼)

區別&#xff1a;我認為的websocket和輪詢的區別 輪詢是客戶端定期向服務端發送請求&#xff0c;目的是獲取的信息 websocket則是服務端直接向客戶端發送想要獲取的信息 配置jdk17 idea 2022 代碼 pom <?xml version"1.0" encoding"UTF-8"?>…

從BIO到NIO到AIO: Java全面IO模型解析

1. Java IO模型概述 Java IO&#xff08;輸入/輸出&#xff09;是Java編程語言中用于數據輸入和輸出的一組功能強大的API。這些API為文件IO、網絡IO以及系統資源IO提供了豐富的類和接口。由于IO操作直接與操作系統交互&#xff0c;因此理解Java IO模型與操作系統模型如何聯系是…

C++ | Leetcode C++題解之第108題將有序數組轉換為二叉搜索樹

題目&#xff1a; 題解&#xff1a; class Solution { public:TreeNode* sortedArrayToBST(vector<int>& nums) {return helper(nums, 0, nums.size() - 1);}TreeNode* helper(vector<int>& nums, int left, int right) {if (left > right) {return nu…