在这里主要是分为表设计优化和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语句优化)的更多相关文章

  1. 优化数据库的方法及SQL语句优化的原则

    优化数据库的方法: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜 ...

  2. 数据库 基于索引的SQL语句优化之降龙十八掌(转)

    一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言      客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...

  3. 重新学习MySQL数据库12:从实践sql语句优化开始

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/79394168 本文不堆叠网上海量的sql优化技巧或 ...

  4. SQL语句优化、mysql不走索引的原因、数据库索引的设计原则

    SQL语句优化 1 企业SQL优化思路 1.把一个大的不使用索引的SQL语句按照功能进行拆分 2.长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引. 3.对SQL语句功能的拆 ...

  5. MySQL常用SQL语句优化

    推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...

  6. 转:sql语句优化

    性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设 ...

  7. 浅谈mysql配置优化和sql语句优化【转】

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...

  8. sql语句优化总结

    sql语句优化总结 数据库优化的几个原则: 1.尽量避免在列上做运算,这样会导致索引失败: 2.使用join是应该用小结果集驱动大结果集,同时把复杂的join查询拆分成多个query.不然join的越 ...

  9. MySQL基础操作&&常用的SQL技巧&&SQL语句优化

    基础操作     一:MySQL基础操作         1:MySQL表复制             复制表结构 + 复制表数据             create table t3 like t ...

随机推荐

  1. hibernate 事务理解

    简介: Hibernate本身并不具备事务管理能力 .在事务管理层, Hibernate将其委托给底层的JDBC或者JTA ,以实现事务管理和调度功能. Hibernate的默认事务处理机制基于JDB ...

  2. Web云笔记--CSS

    CSS CSS CSS Web自学第二阶段之CSS 参考资料:<Head First HTML&CSS>(中文第二版)(美国)弗里昂ISBN:9787508356464 中国电力出 ...

  3. html标签缺省(自带)样式大全

    html标签默认样式整理 作者:佚名  来源:互联网 时间:07-30 16:54:48 文为大家整理了html标签默认样式属性及浏览器默认样式等等,喜欢css布局的朋友们可以学下,希望对大家有所帮助 ...

  4. 关于SVM数学细节逻辑的个人理解(一)

    网上,书上有很多的关于SVM的资料,但是我觉得一些细节的地方并没有讲的太清楚,下面是我对SVM的整个数学原理的推导过程,其中我理解的地方力求每一步都是有理有据,希望和大家讨论分享. 首先说明,目前我的 ...

  5. 201521123093 java 第八周总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 1.泛型简介:同一个代码可以被不同的对象重用 2.使用泛型的好处:允许 ...

  6. 201521123051《java程序设计》 第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 使用工具:XMind 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.ja ...

  7. 201521123003《Java程序设计》第2周学习总结

    1. 本章学习总结 你对于本章知识的学习总结 学习了java中各种数据类型的使用 掌握了基本类型的转换 了解string和stringbuilder的区别以及字符串池的原理 学会了使用package管 ...

  8. 201521123005 《Java程序设计》 第十四周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 Q1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现 ...

  9. 201521145048《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  10. 201521123038 《Java程序设计》 第九周学习总结

    201521123038 <Java程序设计> 第九周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 ...