SQL 优化案例之变更表结构
从慢日志报表中看到一条很长的SQL
select
id
from
myinfo
WHERE 1 = 1
and ((
SUBSTRING_INDEX(location_axis, '$', 3) like concat('%$', 2334)
or SUBSTRING_INDEX(location_axis, '$', 3) like concat(concat('%$', 2334), '$%')
)
or (
SUBSTRING_INDEX(location_axis, '$', 3) like concat('%$', 2337)
or SUBSTRING_INDEX(location_axis, '$', 3) like concat(concat('%$', 2337), '$%')
)
or (
SUBSTRING_INDEX(location_axis, '$', 3) like concat('%$', 2340)
or SUBSTRING_INDEX(location_axis, '$', 3) like concat(concat('%$', 2340), '$%')
)
or (
SUBSTRING_INDEX(location_axis, '$', 3) like concat('%$', 2353)
or SUBSTRING_INDEX(location_axis, '$', 3) like concat(concat('%$', 2353), '$%')
)
or (
SUBSTRING_INDEX(location_axis, '$', 3) like concat('%$', 2367)
or SUBSTRING_INDEX(location_axis, '$', 3) like concat(concat('%$', 2367), '$%')
)
or ......
询问开发得知是通过程序拼成的sql
表中存入的location_axis是区域信息,存三个区域,用$分隔,如 $1$2$3,可以看出要实现的是匹配值是否在location_axis中的第一个域或第二个域中
匹配的值是从另一个表中根据条件获取的如:
select it_area_id itinfo where dep_id=''
问题:繁琐、前缀为%无法使用索引,导致比较慢
优化方式:
将第一个地域编码和第二个分别存在单独的列中,然后和表it_area_id进行关联查询
变更表结构
alter table myinfo add first_axis varchar(10),add sec_axis varchar(10);
update myinfo t1 inner join (select id,SUBSTRING_INDEX(SUBSTRING_INDEX(location_axis,'$',2),'$',-1) as c1 from itinfo)t2 using(id) set t1.first_axis=t2.c1;
update myinfo t1 inner join (select id,SUBSTRING_INDEX(SUBSTRING_INDEX(location_axis,'$',3),'$',-1) as c1 from itinfo)t2 using(id) set t1.sec_axis=t2.c1;
查询语句变为
select opr_bo_id from myinfo t1 inner join itinfo t2 on t1.first_axis=t2.it_area_id or t1.sec_axis=t2.it_area_id where t2.dep_id='';
结果达到毫秒级别
SQL 优化案例之变更表结构的更多相关文章
- mysql的sql优化案例
前言 mysql的sql优化器比较弱,选择执行计划貌似很随机. 案例 一.表结构说明mysql> show create table table_order\G***************** ...
- 数栈SQL优化案例:隐式转换
MySQL是当下最流行的关系型数据库之一,互联网高速发展的今天,MySQL数据库在电商.金融等诸多行业的生产系统中被广泛使用. 在实际的开发运维过程中,想必大家也常常会碰到慢SQL的困扰.一条性能不好 ...
- SQL优化案例—— RowNumber分页
将业务语句翻译成SQL语句不仅是一门技术,还是一门艺术. 下面拿我们程序开发工程师最常用的ROW_NUMBER()分页作为一个典型案例来说明. 先来看看我们最常见的分页的样子: WITH CTE AS ...
- MySQL性能优化方法二:表结构优化
原文链接:http://isky000.com/database/mysql-perfornamce-tuning-schema 很多人都将 数据库设计范式 作为数据库表结构设计“圣经”,认为只要按照 ...
- 在sql设计中没法修改表结构
在做练习的时候经常表没设计好,后来有要去数据库修改表结构但是没词用界面修改的时候都会提示要保存 转自http://www.57xue.com/ItemView/Sql/2016061600160.ht ...
- SQL 优化案例 1
create or replace procedure SP_GET_NEWEST_CAPTCHA( v_ACCOUNT_ID in VARCHAR2, --接收短信的手机号 v_Tail_num i ...
- SQL SERVER 自动生成 MySQL 表结构及索引 的建表SQL
SQL SERVER的表结构及索引转换为MySQL的表结构及索引,其实在很多第三方工具中有提供,比如navicat.sqlyog等,但是,在处理某些数据类型.默认值及索引转换的时候,总有些 ...
- SQL优化 MySQL版 - 多表优化及细节详讲
多表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...
- SQL优化 MySQL版 - 单表优化及细节详讲
单表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...
随机推荐
- Sunday算法模板
Sunday是一个线性字符串模式匹配算法.算法的概念如下: Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法.其核心思想是:在匹配过程中,模式串并不被要求一定要 ...
- GraphicsMagick安装&make命令使用
0.0本过程为GraphicsMagick Linux版安装,通过典型的make编译安装. 未了支持png和jpg格式,首先请安装依赖.执行 yum install -y libpng-devel y ...
- _CrtDumpMemoryLeaks()的作用 检测内存泄漏
_CrtDumpMemoryLeaks()的作用 2007-03-22 10:11 CrtDumpMemoryLeaks()就是显示当前的内存泄漏. 注意是“当前”, 也就是说当它执行 ...
- (三)mybatis之对Hibernate初了解
前言:为什么会写Hibernate呢?因为HIbernate跟Mybatis一样,是以ORM模型为核心思想的,但是这两者有相似的地方也有差异的地方.通过这两种框架的比对,可以对mybatis有着更深的 ...
- DRM 简介
首先,我们对和DRM 相关的一些概念进行介绍. Buffer: 对于RAC 数据库,当一个数据块被读入到buffer cache后,我们就称其为buffer , cache fusion 会将这个bu ...
- Android(java)学习笔记144:网络图片浏览器的实现(ANR)
1.我们在Android下,实现使用http协议进行网络通信,请求网络数据.这里是获取网络上的图片信息,让它可以显示在手机上: 但是我们这个手机连接网络是很费时间,如果我们在主线程(UI线程)中写这个 ...
- 在Solr中配置中文分词IKAnalyzer
李克华 云计算高级群: 292870151 交流:Hadoop.NoSQL.分布式.lucene.solr.nutch 在Solr中配置中文分词IKAnalyzer 1.在配置文件schema.xml ...
- 几个不错的APP网站。
http://www.yunshipei.com/yunshipei.html http://www.appcan.cn/
- SSI的实例(登录增删改查)
源码下载:http://download.csdn.net/detail/u011518709/8195143 主要jar包: 配置文件:web.xml <?xml version=" ...
- ueditor1.4.3.all.js报错
.replace( /<[^>/]+>/g, '' ) 转义符问题! 修改为: .replace( /<[^>\/]+>/g, '' )