索引优化、Sql查询语句优化
工作中我们经常会遇到系统查询慢的情况,一般我们会采取好多方法进行优化,如建立索引,优化查询Sql,分表,规范数据表结构设计,调整数据库参数(内存分配、缓存等),增加硬件配置,优化网络环境等。下面介绍两种常用的优化方法,遵循其中的一些原则,可以解决很多常见的问题。
一、索引设计
建立一个好的索引,对于查询效率,会有一个立竿见影的效果。但索引并不是多多益善,如果建立的不合适,提升的效果微乎其微。下面是一些我在工作中常用到的原则:
1、在经常作为查询条件的字段上创建索引
2、在经常进行Group by,Order by的字段上建立索引
3、在主键、外键字段上建立索引
4、查询频率高的表适合建立索引
5、避免在具有较少值的字段上建立索引,如性别等
6、避免在经常更新(写操作)的字段上建立索引
7、在经常存取的多个列上建立复合索引,字段的顺序应按照使用频率来确定,频率高的在前
8、唯一性差的字段避免使用索引
9、避免选择大型数据类型的列作为索引,如大的文本等。
10、一张表的索引不宜太多,一般不超过6个
11、含有NULL值的字段,避免使用索引,否则将放弃索引而进行全表扫描
12、避免在索引列上使用计算
13、定期分析执行效率,重建索引(rebuild)
二、查询优化
1、不要使用过多的表连接查询(join)
2、少用子查询,尽量使用外连接代替子查询
3、视图嵌套不要过深
4、使用临时表来存放中间结果
5、少用模糊查询
6、优化where子句中的!=或<>
--如SQL:
SELECT id FROM A WHERE ID != 5
--优化成:
SELECT id FROM A WHERE ID>5 OR ID<5
7、优化where子句中in或not in
第一种情况:exist代替in,数据量比较大时,exists效率优于in
--如SQL:
SELECT id FROM A WHERE num in(select num from b )
--优化成:
SELECT num FROM A WHERE num exists(select 1 from B where B.num = A.num)
第二种情况:left join代替in
--如SQL:
SELECT id FROM A WHERE num in(select num from B)
--优化成:
SELECT id FROM A LEFT JOIN B ON A.num = B.num
第三种情况:between替换in
--如SQL:
SELECT id FROM A WHERE num in(1,2,3)
--优化成:
SELECT id FROM A WHERE num between 1 and 3
8、应尽量避免在 where 子句中对字段进行 null 值判断,否则将会进行全表扫描
9、不要在where子句中的“=”左边进行函数、算数运算或其他表达式运算
--如SQL:
SELECT id FROM A WHERE num/2 = 100
--优化成:
SELECT id FROM A WHERE num = 100*2
10、不要使用select * from table,用具体的字段代替*
11、尽量避免类型转换
12、尽量用 union all 替换 union
13、能用inner join连接尽量使用inner join连接,因为inner join是等值连接,或许返回的行数比较少
14、使用外连接(left/right join)时候,应该用小的结果驱动打的结果。left join 左边表结果尽量小,如果有条件应该放到左边先处理,right join同理反向
15、尽量避免使用游标
16、一些复杂的逻辑或者需要定期执行的语句,可以做成存储过程。存储过程可以减少编译时间,客户端与服务器的交互时间等
除了以上常用的优化方法,还有分表、调整数据库参数(内存分配、缓存等)、增加数据文件等方法。关于DBA运维,常用数据库分析工具的使用方法,以后再专门介绍。
索引优化、Sql查询语句优化的更多相关文章
- sql查询语句优化
http://www.cnblogs.com/dubing/archive/2011/12/09/2278090.html 最近公司来一个非常虎的dba 10几年的经验 这里就称之为蔡老师吧 在征得 ...
- SQL查询语句优化的实用方法
查询语句的优化是SQL效率优化的一个方式,可以通过优化sql语句来尽量使用已有的索引,避免全表扫描,从而提高查询效率.最近在对项目中的一些sql进行优化,总结整理了一些方法. 1.在表中建立索引,优先 ...
- Mysql常用30种SQL查询语句优化方法
出处:http://www.antscode.com/article/12deee70111da0c4.html 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使 ...
- MySQL 常用30种SQL查询语句优化方法
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...
- Sql 查询语句优化
sql查询很慢,很多时候并不是数据量大,而是sql语法使用不正确,本文讲述了基础语法使用,避免一些不必要的坑. explain select * from user;--查询执行时间 目录 Sql 优 ...
- sql查询语句优化需要注意的几点
为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设法对之进行简化. 常见的简化规则如下: 1)不要有超过5个以上的表连接(JOIN) 2)考虑使用临时表或表变量存放中间结果. ...
- 深入MySQL(四):MySQL的SQL查询语句性能优化概述
关于SQL查询语句的优化,有一些一般的优化步骤,本节就介绍一下通用的优化步骤. 一条查询语句是如何执行的 首先,我们如果要明白一条查询语句所运行的过程,这样我们才能针对过程去进行优化. 参考我之前画的 ...
- 优化SQL查询:如何写出高性能SQL语句
1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...
- 浅谈SQL优化入门:1、SQL查询语句的执行顺序
1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...
随机推荐
- Java8 中的流式数据处理
java8的流式处理极大了简化我们对于集合.数组等结构的操作,让我们可以以函数式的思想去操作,本篇文章将探讨java8的流式数据处理的基本使用. 一. 流式处理简介 在我接触到java8流式处理的时候 ...
- 算法 | Java 常见排序算法(纯代码)
目录 汇总 1. 冒泡排序 2. 选择排序 3. 插入排序 4. 快速排序 5. 归并排序 6. 希尔排序 6.1 希尔-冒泡排序(慢) 6.2 希尔-插入排序(快) 7. 堆排序 8. 计数排序 9 ...
- Flash XSS
示例: 创建一个测试flash,代码如下,导出swf文件 //取m参数 var m=_root.m; //取showInfo参数 var showInfo=_root.showInfo; //调用ht ...
- Windows 8下完美使用Virtual PC 2007(virtual pc 2007 64 win8 兼容性)
Windows 8下完美使用Virtual PC 2007(virtual pc 2007 64 win8 兼容性) 一.从微软的官方网站下载Virtual PC 2007 SP1英文版,文件名为se ...
- 记录Markdown的学习
目录 1. 引言 2. 标题 这是一级标题 这是二级标题 这是三级标题 这是四级标题 3. 文字相关 3.1 粗体 3.2 斜体 3.3 粗体和斜体 3.4 删除线 3.5 混合使用 3.6 反引号引 ...
- K8S原来如此简单(八)ServiceAccount+RBAC
ServiceAccount ServiceAccount是给运行在Pod的程序使用的身份认证,Pod容器的进程需要访问API Server时用的就是ServiceAccount账户. Service ...
- 如何用python裁剪图片
如何使用python裁剪图片 如上图所示,这是一张包含了各类象棋棋子的图片.我们需要将其中每一个棋子都裁剪出来,此时可以利用python的 PIL库 实现. 一. 安装PIL库 如果此前没有安装过PI ...
- 哪些是重要的bean生命周期方法?你能重载它们吗?
有两个重要的bean 生命周期方法,第一个是setup , 它是在容器加载bean的时候被调用.第二个方法是 teardown 它是在容器卸载类的时候被调用. The bean 标签有两个重要的属性( ...
- ctfhub密码口令
弱口令 进入环境 使用burpsuit抓包爆破 密码长度不一样应该密码就为他 即可找到 默认口令 进入环境一开始不懂百度借鉴原来是要看常见设备默认口令 很快就找到了 一个一个的试 即可获得答案
- 一、cadence元件库绘制详细步骤
一.元件库 1.打开如下图标的软件 2.勾选1选项,下次就直接打开,不用选择 3.新建库文件File-New-Library,如下图: 4.新建元件 5.绘制元件