MySQL 8.0 Query Rewrite支持SELECT INSERT UPDETE DELETE REPLACE語句重寫
創(chuàng)新互聯(lián)是一家專業(yè)提供澄邁企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站制作、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為澄邁眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進(jìn)行中。
這個功能要點贊,比如開發(fā)上線時,有個SQL查詢字段索引忘記加了,直接把線上CPU打滿,此時,你可以將SQL重寫,讓業(yè)務(wù)先報錯,別打死數(shù)據(jù)庫,然后馬上通知開發(fā)回滾,等加完索引后再上線。
安裝插件
mysql?-S?/tmp/mysql_hcy.sock?-p123456?<./install_rewriter.sql
查看是否生效
SHOW?GLOBAL?VARIABLES?LIKE?'rewriter_enabled';
編寫重寫規(guī)則
insert?into?query_rewrite.rewrite_rules(pattern,?replacement,? pattern_database)?values?( "SELECT?*?from?sbtest1?limit??", "SELECT?k,c?from?sbtest1?limit??", "test");
意思為:
將以下語句
SELECT * from sbtest1 limit ?;
改寫成:
SELECT k,c from sbtest1 limit ?;
注:問號?為變量
執(zhí)行規(guī)則生效
CALL?query_rewrite.flush_rewrite_rules();
演示
mysql>?SELECT?*?from?sbtest1?limit?1\G; ***************************?1.?row?*************************** k:?499284 c:?83868641912-28773972837-60736120486-75162659906-27563526494-20381887404-41576422241-93426793964-56405065102-33518432330 1?row?in?set,?1?warning?(0.00?sec) ? ERROR:? No?query?specified ? mysql>?show?warnings\G ***************************?1.?row?*************************** ??Level:?Note ???Code:?1105 Message:?Query?'SELECT?*?from?sbtest1?limit?1'?rewritten?to?'SELECT?k,c?from?sbtest1?limit?1'?by?a?query?rewrite?plugin 1?row?in?set?(0.00?sec)