• 不要使用*号进行查询操作,使用具体字段.
  • 索引
    • 在where子句和order by 涉及的字段上合理的添加索引.
  • where 子句优化
    • 避免在where子句中对null值进行判断,应对字段设置默认值

      Select id from t where num is null
      可以对null值设置默认值为-1(根据自己的实际情况设置)
      判断null可以使用
      select id from t where num = -1
    • 避免在where子句中使用!= 或者<>操作符.
    • 尽量避免where子句中使用or 来连接条件
      select id from t where num = 1 or num = 5
      /*可以优化为*/
      select id from t where num = 1
      unicon all
      select id form t where num = 5
    • in 和not  in  也要慎用
      /*连续条件*/
      select id from t where num in (1,2,3)
      /*可以使用 between and */
      select id from t where num between 1 and 3
      /*更多可以使用exists 代替 in*/
      select num from a where num in (select num from t)
      /*替换语句*/
      select num from a where EXISTS (select num from b where a.num = b.num)
    • 模糊查询SQL优化
    • /*正常情况下,百分号在后面可以使用索引*/
      select nickname from t where nickname like 'DBA%'
      /*百分号在前面,不能使用索引,解决方案.改写sql,添加reverse索引*/
      create index idx_t1_name on t1(reverse(name))
      select name from t1 where reverse(name) like reverse('%adc');
      /*前后都有百分号,这种情况一般不能使用索引.*/
      /*1.搜索条件字符串始终在字符串开始的固定位置出现,可以创建函数索进行优化,先创建subStr 函数索引,再使用like 'abc%'示例:*/
      create index idx_substr_t1_name on t1 (substr(name,5,10));
      select id, name ,name_type from t1 where substr(name, 5,10) like 'abc%';
      /*2.搜索条件始终在字符串结尾的某个固定位置出现,可以创建函数组合索引进行优化,先创建reverse + substr 组合函数索引,再使用like reverse '%abc'*/
      create index idx_t1_reverse_name on t1(reverse(substr(name,1,length(name)-4))); select id,name,name_type from t1 where reverse(substr(name,1,length(name)-4)) like reverse('%abc') /*3.搜索字符串再不固定位置出现,优化方案,先建立普通索引列,改写sql*/
      create index idx_t1_name on t1(name) select id,name,name_type from t1 where name in (select name from t1 where name like '%abc%')
    • 避免在where子句中对字段的 '=' 左边进行函数,算数,或其他表达式运算
    • 不要使用select counut(*) from table ,这样不带任何条件的count会引起全表扫描, 可以使用count(1) 代替

SQL语句优化方式的更多相关文章

  1. SQL语句优化方式--进阶篇

    MYSQL性能 最大数据量 抛开数据量和并发数,谈性能都是扯淡(扯的最疼的那种).Mysql没有限制单表最大记录数,它取决与操作系统对文件大小的限制 文件系统 单文件大小限制 FAT32(采用32位二 ...

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

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

  3. MySQL常用SQL语句优化

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

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

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

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

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

  6. 关于索引的sql语句优化之降龙十八掌

    1 前言       客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急剧下降,小型机idle所剩无几,应用服务器断连.超时,严重影响业务的正 ...

  7. Oracle SQL语句优化34条

    非常好用的SQL语句优化34条 1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 dri ...

  8. 提高系统性能——对SQL语句优化的思考

    软件在研发的过程中自始至终都在留意着系统的可扩展性.但与此同一时候也在关注着系统的性能,SQL语句作为系统性能的一环不容忽视.从今天開始结合开发的经验,谈一下我对SQL语句优化的理解和认知: 1.在联 ...

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

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

随机推荐

  1. 【学习总结】Python-3-round()函数的奇进偶弃的问题

    参考: 本教程的评论区:菜鸟教程-Python3-Python数字 "4舍6入5看齐,奇进偶不进" 取代"四舍五入". round()函数: 可以在第二个参数指 ...

  2. react native 打包至iphone设备

    1.新建bundle 在自己项目的ios文件夹下新建一个文件夹取名bundle PS:ios文件夹和node_modules文件夹在同一级目录下,这个bundle文件夹名称随意取,后面要用到,但是记得 ...

  3. Linux就该这么学11学习笔记

    参考链接:https://i.cnblogs.com/EditPosts.aspx?opt=1 文件传输协议 一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式 ...

  4. pyc文件是什么

    pyc 是一种二进制文件,是由 py 文件经过编译后,生成的文件,是一种 bytecode,py 文件变成 pyc 文件后,加载的速度有所提高,而且 pyc 是一种跨平台的字节码,是由 Python ...

  5. javascript 回到顶部效果的实现

    demo.js window.onload=function() { var timer=null; var obtn=document.getElementById('btn'); var isTo ...

  6. bzoj4036 [HAOI2015]按位或 状压DP + MinMax 容斥

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4036 题解 变成 \(2^n-1\) 的意思显然就是每一个数位都出现了. 那么通过 MinMa ...

  7. ubuntu 安装apache2 二进制包

    官方安装教程  http://httpd.apache.org/docs/2.4/install.html 一.下载安装包 进入https://httpd.apache.org/download.cg ...

  8. Linux中的bin文件夹

    ~/bin适合放个人用户的 script /usr/local/bin存放系统中所有用户都可以使用的 script /usr/local/sbin存放管理员的 script /usr/local/目录 ...

  9. 【8.0.0_r4】AMS分析(十七)(ActivityManagerService.java下)

    代码位于frameworks/base/services/core/java/com/android/server/am/,一共有七十个文件. Java源码位于package com.android. ...

  10. Android USB驱动源码分析(-)

    Android USB驱动中,上层应用协议里最重要的一个文件是android/kernel/drivers/usb/gadget/android.c.这个文件实现USB的上层应用协议. 首先包含了一些 ...