数据库的优化(表优化和sql语句优化)
在这里主要是分为表设计优化和sql语句优化两方面来实现。
首先的是表设计优化:
1.数据行的长度不要超过8020字节。如果是超过这个长度的话这条数据会占用两行,减低查询的效率。
2.能用数字类型就不要用字符串类型。字符串类型的会降低查询的效率并且增加存储。因为引擎在进行查询的的时候会逐个的比较字符串中 的每一个字符,而对应的数值类型的只需要比较一次就可以了。
3.对于不可变字符类型 char 和可变字符类型 varchar 都是 8000 字节,char查询快,但是耗存储空间,varchar 查询相对慢一些但是节省存储空间。在设计字段的时候可以灵活选择,例如用户名、密码等长度变化不大的字段可以选择CHAR,对于评论等长度变化大的字段可以选择 VARCHAR。
4.字段在满足要求的情况下尽量的短一些,这样可以提高查询效率,并且在建立索引的时候可以减少资源的消耗。
查询的优化:就是尽量的避免全表查询
1.应该尽量避免在where条件里面进行null的判断,这样会查询的时候放弃索引而进行全表查询
2.应该尽量避免在where字句中使用!=,<,>这些符号,否则的话就会放弃使用索引而进行全表扫描。这是因为优化器无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行。
3.应该尽量的避免在where子句中使用or来连接条件,否则会导致放弃使用索引而进行全表扫描。
例如:
select username from user where id=10 or id=20;
应该改为:
select username from user where id=10
union all
select username form user where id=20;
4.in 和not in也要慎用。因为in会使系统无法使用索引,而只能直接搜索表中的数据。
如(这是对应与连续的值来说的):
select username from user where id in (1,2);
应该改为:
select username from user where id between 1 and 2; .
5. 尽量避免在索引过的字符数据中,使用非打头字母搜索。这也使得引擎无法利用索引。
见如下例子:
1. Select * FROM T1 Where NAME LIKE ‘%L%’
2. Select * FROM T1 Where SUBSTING(NAME,2,1)=’L’
3. Select * FROM T1 Where NAME LIKE ‘L%’
即使 NAME 字段建有索引,前两个查询依然无法利用索引完成加快操作,引擎
不得不对全表所有数据逐条操作来完成任务。而第三个查询能够使用索引来加快
操作。
6.必要时强制查询优化器使用某个索引,如在 where 子句中使用参数,也会导致全表扫描。因为 SQL 只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num.
7.应该尽量避免在where字句中对字段进行表达式操作,这将导致放弃索引而使用全表扫描。
select * from user where math/2=45;
应该改为:
select * from user where math=45*2;
也就是任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
8.应尽量避免在 where 子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。
9.不要在where字句的“=” 左边进行函数,算术运算或者其他表达式运算,否则系统无法正确使用索引。
10.在使用索引作为字段条件时,如果是复合索引,那么必须使用该索引中的第一个字段作为条件才能保证系统使用该索引,否则该索引是不会被使用的,并且尽可能的让字段顺序与索引顺序相一致。
11.使用exists替代in
1. elect num from a where num in(select num from b)
select num from a where exists(select 1 from b where num=a.
num)
12.避免使用不兼容的数据类型。例如float 和int、char 和varchar、binary和 varbinary 是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。
13.能用 UNION ALL 就不要用 UNIONUNION ALL 不执行 Select DISTINCT 函数,这样就会减少很多不必要的资源。
14.尽量不要用 Select INTO 语句。Select INOT 语句会导致表锁定,阻止其他用户访问该表。
2017-10-16
数据库的优化(表优化和sql语句优化)的更多相关文章
- 优化数据库的方法及SQL语句优化的原则
优化数据库的方法: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜 ...
- 数据库 基于索引的SQL语句优化之降龙十八掌(转)
一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言 客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...
- 重新学习MySQL数据库12:从实践sql语句优化开始
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/79394168 本文不堆叠网上海量的sql优化技巧或 ...
- SQL语句优化、mysql不走索引的原因、数据库索引的设计原则
SQL语句优化 1 企业SQL优化思路 1.把一个大的不使用索引的SQL语句按照功能进行拆分 2.长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引. 3.对SQL语句功能的拆 ...
- MySQL常用SQL语句优化
推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...
- 转:sql语句优化
性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设 ...
- 浅谈mysql配置优化和sql语句优化【转】
做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...
- sql语句优化总结
sql语句优化总结 数据库优化的几个原则: 1.尽量避免在列上做运算,这样会导致索引失败: 2.使用join是应该用小结果集驱动大结果集,同时把复杂的join查询拆分成多个query.不然join的越 ...
- MySQL基础操作&&常用的SQL技巧&&SQL语句优化
基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t ...
随机推荐
- RadioButtonList控件如何取得选中的值
1.需求:我现在页面上有放两个单选控件,现在要通过判断不同的单选控件来对页面上的标签进行显示和隐藏操作 2.控件如下 <asp:RadioButtonList ID=" RepeatD ...
- RMA退货流程解决方案
RMA退货流程解决方案 1.概述 在高科技制造业中有效地对产品退货进行控制和跟踪有很大的意义.对于一个产品成本从几元到几十万元的工业,管理退货流程的能力至关重要,缺乏跟踪和控制有可能导致上百万元的损失 ...
- 转:【Java集合源码剖析】HashMap源码剖析
转载请注明出处:http://blog.csdn.net/ns_code/article/details/36034955 您好,我正在参加CSDN博文大赛,如果您喜欢我的文章,希望您能帮我投一票 ...
- css样式实现立方体制作
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 201521123105 第8周Java学习总结
1.本周学习总结 1.1思维导图 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 1.删除元素的时候从最后一个元素开始,避免删除元素后位置发生变化而导致 ...
- 201521123039《Java程序设计》 第六周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 1.2 可选:使用常规方法总结其他上课内容. 答:1.cl ...
- 20152112308 《Java程序设计》第3周学习总结
本周学习总结 书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; public ...
- 201521123052 《Java程序设计》 第14周学习总结
1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) - ...
- chrome保存网页为单个文件(mht格式)
网页归档(英语:MIME HTML或MIME Encapsulation of Aggregate HTML Documents,又称单一文件网页或网页封存盘案)为以多用途互联网邮件扩展格式,将一个多 ...
- [03] Servlet继承关系和生命周期
1.Servlet的继承关系 假如现有我们自定义的一个Servlet,继承HttpServlet,那么实际上它的继承链如下图: 可以看到,核心的部分在于: 两个顶级接口 Servlet Servl ...