安装Query Rewrite Plugin

在MySQL的安装目录的share文件夹下,有两个文件用来安装和卸载Query Rewrite Plugin:

install_rewriter.sql: 安装脚本
uninstall_rewriter.sql: 卸载脚本
install_rewriter.sql文件中脚本为:
/* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.

   This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ CREATE DATABASE IF NOT EXISTS query_rewrite; CREATE TABLE IF NOT EXISTS query_rewrite.rewrite_rules (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
pattern VARCHAR(10000) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
pattern_database VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_bin,
replacement VARCHAR(10000) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
enabled ENUM('YES', 'NO') CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
DEFAULT 'YES',
message VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_bin,
pattern_digest VARCHAR(32),
normalized_pattern VARCHAR(100)
) DEFAULT CHARSET = utf8 ENGINE = INNODB; INSTALL PLUGIN rewriter SONAME 'rewriter.so';
CREATE FUNCTION load_rewrite_rules RETURNS STRING
SONAME 'rewriter.so'; DELIMITER // CREATE PROCEDURE query_rewrite.flush_rewrite_rules()
BEGIN
DECLARE message_text VARCHAR(100);
COMMIT;
SELECT load_rewrite_rules() INTO message_text;
RESET QUERY CACHE;
IF NOT message_text IS NULL THEN
SIGNAL SQLSTATE '' SET MESSAGE_TEXT = message_text;
END IF;
END // DELIMITER ; RESET QUERY CACHE;

安装完成后,可以使用下面脚本查看功能是否启用:

SHOW GLOBAL VARIABLES LIKE 'rewriter_enabled';

+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| rewriter_enabled | ON |
+------------------+-------+

演示Demo

1、插入重写规则

INSERT INTO query_rewrite.rewrite_rules
(pattern, replacement, pattern_database)
VALUES
(
"SELECT * FROM TB001 WHERE C1=?",
"SELECT *,'NEW' AS C11 FROM TB001 WHERE C1=?",
"demodb"
);

2、加载规则

## 加载重写规则
CALL query_rewrite.flush_rewrite_rules(); ## 查看当前重写规则
SELECT * FROM query_rewrite.rewrite_rules \G *************************** 1. row ***************************
id: 7
pattern: SELECT * FROM TB001 WHERE C1=?
pattern_database: demodb
replacement: SELECT *,'NEW' AS C11 FROM TB001 WHERE C1=?
enabled: YES
message: NULL
pattern_digest: cf177a9a728143a27502f890698316e5
normalized_pattern: select `*` from `demodb`.`tb001` where (`C1` = ?)
1 row in set (0.00 sec)

3、测试重写:

SELECT  *  FROM     TB001
WHERE C1=2; +--------+------+-----+
| ID | C1 | C11 |
+--------+------+-----+
| AAA102 | 2 | NEW |
| AAA112 | 2 | NEW |
| AAA12 | 2 | NEW |
| AAA122 | 2 | NEW |
| AAA132 | 2 | NEW |
+--------+------+-----+ SELECT * FROM TB001
WHERE C1=2 LIMIT 1; +--------+------+
| ID | C1 |
+--------+------+
| AAA102 | 2 |
+--------+------+

可以发现SQL语句中的换行或空格对重写规则无影响,但不能在重写模板基础上增加其他内容如LIMIT 字句。

MySQL Execution Plan--使用Query Rewrite的更多相关文章

  1. Oracle SQL explain/execution Plan

    From http://blog.csdn.net/wujiandao/article/details/6621073 1. Four ways to get execution plan(anyti ...

  2. Execution Plan 执行计划介绍

    后面的练习中需要下载 Demo 数据库, 有很多不同的版本, 可以根据个人需要下载.  下载地址 -http://msftdbprodsamples.codeplex.com/ 1. 什么是执行计划 ...

  3. 搜索引擎Query Rewrite

    中心词抽取项目总结 B2B国际站Query重写.ppt 达观数据搜索引擎的Query自动纠错技术和架构详解 Natural Language Processing Simrank++ Query re ...

  4. sql server 执行计划(execution plan)介绍

    大纲:目的介绍sql server 中执行计划的大致使用,当遇到查询性能瓶颈时,可以发挥用处,而且带有比较详细的学习文档和计划,阅读者可以按照我计划进行,从而达到对执行计划一个比较系统的学习. 什么是 ...

  5. Mysql报Packet for query is too large (1040 > 1024)错误

    Linux下mysql 报Packet for query is too large (1040 > 1024)错误的解决方法 项目之前一直正常运行,这几天突然一直提示查询出错,看了下日志发现提 ...

  6. 一次MySQL异常排查:Query execution was interrupted

    异常日志: 查询被中断了,先是在Google上查,又是再百度上查,基本上都是说程序超时设置setQueryTimeout的问题,就是说查询时间超过了设置的最大查询时间,导致查询被中断.我也没办法断定是 ...

  7. web.py+mysql插入中文提示query = query.encode(charset) UnicodeEncodeError: 'latin-1' codec can't encode characters in position 86-100

    对于中文编码的问题,总会出现各种各样恶心的错误,还不知道应该怎么解决,首先,你从最开头就应该关注编码问题,尽量保证所有的编码方式都是一致的 用python+web.py+mysql来写程序,首先要保证 ...

  8. 关于mysql的错误 - no query specified

    Mysql----error:no query specified mysql下抛出错误:error:no query specified出现此错误是sql不合法原因:如:select * from ...

  9. mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用

    mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句. 慢查询配置和使用 在msyql ...

随机推荐

  1. hdu1247-Hat’s Words-(字典树)

    http://acm.hdu.edu.cn/showproblem.php?pid=1247 题意:给出一堆单词,求哪些单词是其中某两个单词拼接起来的. 题解:用字典树存储所有的单词,标记结束点,再次 ...

  2. HttpRequest对象

    在面向对象的语言中,有种“万物皆对象”的说法.在上篇文章中介绍了HttpRuntime类,在该类收到请求之后,立即通过HttpWorkerRequest工作者对象对传递的参数进行分析和分解,创建方便网 ...

  3. 【day02】PHP

    一.数据类型(8个主要数据类型和4个伪类型)  1.8个主要数据类型     (1)标量类型(存储单一值)        a.整型(Integer Int)        b.浮点型(Float Do ...

  4. [THUPC2018]弗雷兹的玩具商店(线段树,背包)

    最近状态有点颓,刷刷水题找找自信. 首先每次询问就是完全背包.可以 $O(m^2)$. 由于每个物品都可以用无数次,所以对于价格相同的物品,我们只用考虑愉悦度最高的. 直接上线段树.$val[i]$ ...

  5. [LeetCode] 909. Snakes and Ladders 蛇梯棋

    On an N x N board, the numbers from 1 to N*Nare written boustrophedonically starting from the bottom ...

  6. [LeetCode] 875. Koko Eating Bananas 科科吃香蕉

    Koko loves to eat bananas.  There are N piles of bananas, the i-th pile has piles[i] bananas.  The g ...

  7. Linux挖矿程序kworkerds分析

    0×00 背景概述 近日,同伴的一台Linux服务器中了kworkerds挖矿程序,随即对挖矿程序进行了处理与分析. 0×01服务器现状 进入服务器之后通过top命令,没有发现有占用CPU资源过高的进 ...

  8. BS项目启动任意EXE文件或者CS项目

    1. 基于注册表启动exe程序 1. 桌面新建注册表执行文件:protocal.reg 2. 任意文本编辑器打开该文件 Windows Registry Editor Version 5.00 [HK ...

  9. Failed to start LSB: Bring up/down networking 另外一个偏方

    之前网卡启动不了,会是配置不对,或者是移动了虚拟机导致hwaddr发生了变化. 但是今天没改动什么,突然用不了,一直报错Failed to start LSB: Bring up/down .... ...

  10. setInterval()调用其他函数时候报错

    (function(){ function shortcut() { // 配件优化 window.topValue = 0// 上次滚动条到顶部的距离 window.interval = null; ...