1. 索引:
索引可以提高查询的速度,但不是使用带有索引的字段查询时,索引都会起作用,如下几种特殊情况下,有可能使用带有索引的字段查询时,索引没有起作用:
1)使用LIKE关键字的查询语句
  如果匹配字符串的第一个字符为“%”,索引不会起作用,只有“%”不在第一个位置,索引才会起作用
2)使用多列索引的查询语句
  Mysql可以为多个字段创建索引,一个索引可以包括16个字段,对于多列索引,只有查询条件中使用了这些字段中的第一个字段后时,索引才会被使用。
3)使用OR关键字的查询语句
  查询语句的查询条件中只有OR关键字,且OR前后两个条件中的列都是索引时,查询中才使用索引,否则查询将不使用索引。

2. 不同SQL语句的优化方法
1)INSERT语句
  a) 一次性批次插入多行数据与多次分别插入相比,将大大缩短客户端与服务器之间的连接和关闭等操作,如:

  insert into books values (1,"book1"), (2, "book2"), (3, "book3");

  b) 通常可以锁定表以加速插入数据,如下:

  lock tables books;
  insert into books values (1,"book1"), (2, "book2"), (3, "book3");
  unlock tables;

2) ORDER BY语句
通常使用索引来对ORDER BY语句进行优化,几个常用的例子如下:
a) ORDER BY + LIMIT 组合的索引进行优化,如:

select id, name, age from user order by id limit 0,15; ---只需在id上建立索引即可

b) WHERE + ORDER BY + LIMIT 组合的索引优化,如:

select id, name, age from user where name="lilei" order by id limit 0,15;---此时如果只对id添加索引,效率不是很高,此时可以建立一个联合索引(id,name)

c) 不要对WHERE 和 ORDER BY的选项使用表达式或者函数,如:

select id, name, age from user order by max(id) limit 0,15;

下面这几种情况下不适合使用索引:

a)ORDER BY的字段使用 asc、desc
b) WHERE 子句使用的字段和ORDER BY的字段不一致,如:

select id, name, age from user where name="lilei" order by id;

c) 对不同给的关键字使用ORDER BY排序,如:

select id, name, age from user order by id, name;

3) GROUP BY语句
  使用GROUP BY语句时,Mysql会对符合的结果自动排序,通过扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累计行数,
在某些情况下,Mysql可以通过索引访问而不使用临时表。通过制定 GROUP BY NULL来禁止排序, 从而可以节省损耗。

4)优化嵌套查询
可以使用连接(JOIN)来代替子查询(内层嵌套的select语句),连接查询不需要建立临时表,其查询速度比子查询要快,如果查询中使用索引的话,性能会更好。

补充一下join及union的区别:

(1)union对两张表的操作是合并数据条数,等于是纵向的,要求是两张表字段必须是相同,

  也就是说如果A表中有三条数据,B表中有两条数据,那么A union B就会有五条数据。

  (union 和union all的差别,对于union如果存在相同的数据记录会被合并,而union all不会合并相同的数据记录,该有多少条记录就会有多少条记录。)

(2)join偏于横向的联合。join跟union比起来显得更宽松,对两个表的字段不做要求,没有限制条件的join等于两个表的笛卡尔乘积,所有join需要有限制条件来约束,经过限制的join就是横向的扩张了。
5)优化OR条件
对于使用OR条件的子查询,如果要使用索引,则OR之间的每个条件列都必须使用到索引,创建索引后,是对OR的各个字段在查询结果后在进行UNION操作。

SQL性能优化的几点建议的更多相关文章

  1. SQL性能优化

    引言: 以前在面试的过程中,总有面试官问道:你做过sql性能优化吗?对此,我的答复是没有.一次没有不是自己的错误,两次也不是,但如果是多次呢?今天痛下决心,把有关sql性能优化的相关知识总结一下,以便 ...

  2. SQL Select count(*)和Count(1)的区别和执行方式及SQL性能优化

    SQL性能优化:http://www.cnblogs.com/CareySon/category/360333.html Select count(*)和Count(1)的区别和执行方式 在SQL S ...

  3. ORACLE数据库学习之SQL性能优化详解

                                                                                    Oracle  sql 性能优化调整 ...

  4. SQL 性能优化 总结

    SQL 性能优化 总结 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving ...

  5. SQL性能优化前期准备-清除缓存、开启IO统计

    文章来至:https://www.cnblogs.com/Ren_Lei/p/5669662.html 如果需要进行SQl Server下的SQL性能优化,需要准备以下内容: 一.SQL查询分析器设置 ...

  6. Oracle SQL性能优化技巧大总结

    http://wenku.baidu.com/link?url=liS0_3fAyX2uXF5MAEQxMOj3YIY4UCcQM4gPfPzHfFcHBXuJTE8rANrwu6GXwdzbmvdV ...

  7. sql性能优化浅谈

    sql性能优化总结: 最近随着数据越来越多,数据库性能问题暴露的越来越严重.几百万,上千万,甚至过亿的数据处理速度会非常的慢. 下面对工作中遇到的问题做下总结,希望以后能对日后的工作有所帮助. 不同的 ...

  8. SQL性能优化技巧

    作者:IT王小二 博客:https://itwxe.com 这里就给小伙伴们带来工作中常用的一些 SQL 性能优化技巧总结,包括常见优化十经验.order by 与 group by 优化.分页查询优 ...

  9. SQL性能优化常见措施(Lock wait timeout exceeded)

    SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...

随机推荐

  1. vue-cli完整地引入element-ui

    1因为该组件会依赖于jQuery,所以先安装jQuery所需依赖: 进入npm控制台,输入指令: cnpm install jquery --save-dev 然后在入口文件main.js中引入: i ...

  2. 【Java学习笔记之二十】final关键字在Java继承中的用法小结

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...

  3. [bzoj2836] 魔法树

    俩操作:增加路径上的点的权值.查询子树的权值和. 想了想似乎只能树链剖分了..好久没写链剖+数据结构了TAT 一开始没开LL炸了一发(明明有想到的..我果然是傻逼= = #include<cst ...

  4. TCP 和 UDP

    TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  5. ios - 如何获取app上的数据

    做过ios开发的人应该都用过Charles,通常叫它花瓶.Charles是Mac下常用的对网络流量进行分析的工具,类似于Windows下的Fiddler.在开发iOS程序的时候,往往需要调试客户端和服 ...

  6. git只添加指定类型的文件的.gitignore规则

    #忽略根目录下的所有文件 * #忽略子目录下的所有文件 /* #包含目录 !*/ #指定不忽略的文件 !*.c !*.h #忽略根目录下的文件 /build/ /appveyor/ /pear/ /s ...

  7. Mac OS启动服务优化高级篇

    一.Mac下的启动服务主要三个可配置的地方 1.系统偏好设置->帐户->登陆项 2./System/Library/StartupItems 和 /Library/StartupItems ...

  8. 用程序读取CSV文件的方法

    CSV全称 Comma Separated values,是一种用来存储数据的纯文本文件格式,通常用于电子表格或数据库软件.用Excel或者Numbers都可以导出CSV格式的数据. CSV文件的规则 ...

  9. phthon网络编程

    软件开发架构 既然谈起网络编程,就得说说软件开发的架构: c/s架构 C/S结构软件(即客户机/服务器模式)分为客户机和服务器两层,客户机不是毫无运算能力的输入.输出设备,而是具有了一定的数据处理和数 ...

  10. ArcGIS字段计算器分割字段中的字符串

    ArcGIS字段计算器分割字段中的字符串 实例:在一个字段中存有长宽高三个属性数据,以x分割.例如sss为字段名(字段属性为文本类型),数据格式为:100x200x300,利用字段计算器分别将三个数存 ...