不管是用C/C++/Java等代码编写的程序,还是SQL编写的数据库脚本,都存在一个持续优化的过程。也就是说,代码优化对于程序员来说,是一个永恒的话题。
近期,我们对之前编写的数据库脚本进行了全面的自查,从数据库的性能方面考虑,将脚本里面的很多SQL语句进行了优化。对于一条SQL语句来说,索引的使用是否正确将直接影响到数据库的性能,因此,对索引使用方法的优化是数据库性能优化的重点。本文对常用的数据库索引优化语句进行了总结,可供相关的开发人员参考。
索引优化建议 
1.对索引列进行计算 
例如,我们想要将表tb_test中id大于100的数据记录中的age和name查找出来。
正确的SQL语句是:
select age,name from tb_test where id > 1*100;
不建议采用的SQL语句是:
select age,name from tb_test where id/100 > 1;
2.对索引列进行拼接 
例如,我们想要将表tb_test中name为“zhou”、addr为“CQ”的记录中的id和age查找出来。
正确的SQL语句是:
select id,age from tb_test where name=’zhou’ and addr=’CQ’;
不建议采用的SQL语句是:
select id,age from tb_test where concat(name,’ ‘,addr) = ‘zhou CQ’;
3.在索引列上is null或is not null的使用 
例如,我们想要将表tb_test中id大于等于“0”的记录中的age查找出来。
正确的SQL语句是:
select age from tb_test where id >= 0;
不建议采用的SQL语句是:
select age from tb_test where id is not null;
4.在索引列上or的使用 
例如,我们想要将表tb_test中id等于101或102的记录中的age和name查找出来。
正确的SQL语句(使用union)是:
select age,name from tb_test where id = 101 union select age,name from tb_test where id = 102;
不建议采用的SQL语句(使用or)是:
select age,name from tb_test where id = 101 or id = 102;
5.尽可能避免索引列在like的首字符使用通配符 
例如,我们想要将表tb_test中name匹配“zho”的记录中的id和age查找出来。
正确的SQL语句是:
select id,age from tb_test where name like ‘zho%’;
不建议采用的SQL语句是:
select id,age from tb_test where name like ‘%ho%’;
6.复合索引的使用 
如果我们建立的索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引。
例如,我们在表tb_test上新建了如下索引:
create index idx4_tb_test on tb_test(id,name,addr);
以上索引idx4_tb_test相当于建立了index(id)、index(id,name)、index(id,name,addr) 这3个索引。在SQL语句的where条件中单独使用name或addr时不会使用到该索引,必须使用id时才会使用到该索引。
总结 
在我们编写的SQL语句中,不正确地使用索引列可能会导致索引不被使用,而进行全表扫描,极大地降低了数据库的性能。因此,学习正确的索引的使用方法实在是很有必要的。

但是,需要指出的是,本文中提到的数据库索引的优化语句必须要在操作大量数据时才能显示出效果。在编写数据库脚本之前,大家可以先评估一下系统的数据量,看是否有必要在SQL优化上花费大量的时间。

Oracle学习总结(7)—— 常用的数据库索引优化语句总结的更多相关文章

  1. 知识点:Mysql 数据库索引优化实战(4)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 一:插入订单 业务逻辑:插 ...

  2. 【Oracle】曾经的Oracle学习笔记(1-3) 数据库常见用语,常见命令,创建测试表

    一.数据库的登录 二.数据库常用语 三.测试表的创建,测试数据初始化 四.常见命令介绍 五.测试 user:jeffreysn:jeffrey user:systemsn:jeffrey 浏览器中输入 ...

  3. mysql数据库索引优化与实践(一)

    前言 mysql数据库是现在应用最广泛的数据库系统.与数据库打交道是每个Java程序员日常工作之一,索引优化是必备的技能之一. 为什么要了解索引 真实案例 案例一:大学有段时间学习爬虫,爬取了知乎30 ...

  4. MySQL高级学习笔记(四):索引优化分析

    文章目录 性能下降 SQL慢 执行时间长 等待时间长 查询语句写的烂 查询数据过多 关联了太多的表,太多join 没有利用到索引 单值 复合 服务器调优及各个参数设置(缓冲.线程数等)(不重要DBA的 ...

  5. mysql数据库索引优化

    参考 :http://www.cnblogs.com/yangmei123/archive/2016/04/10/5375723.html MySQL数据库的优化:    数据库优化的目的:     ...

  6. Oracle 学习笔记3:新建数据库没有scott用户解决办法

    新建一个数据库,若选择Oracle组件时,没有选择实例方案,完成后进行口令管理,默认列表中是找不到scott用户解锁的.若要解锁scott用户,可以进行如下操作: 使用system或者sys连接数据库 ...

  7. MySql数据库索引优化注意事项

    设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率.设计MySql索引的时候有一下几点注意: 1,创建索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为 ...

  8. Oracle学习(四)SQL高级--表优化相关(序列、视图等)

    INDEX(索引) 可以在表中创建索引,以便更加快速高效地查询数据. 用户无法看到索引,它们只能被用来加速搜索/查询. PS:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引 ...

  9. [原]常用sqlserver数据库使用sql语句

    1.表结构文档生成查询语句: SELECT 架构名 Then s.[name] Else '' End, 表名 Then D.name Else '' End, 表说明 Then isnull(F.v ...

随机推荐

  1. freeswitch 编码协商

    编辑 /usr/local/freeswitch/conf/sip_profiles/internal.xml 添加注释     <param name="inbound-zrtp-p ...

  2. Mysql干货收集

    mysql优化:https://www.cnblogs.com/duanxz/tag/mysql/default.html?page=1

  3. python 网络编程 粘包问题

    1.粘包现象 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.   粘包出现原因 使用了优化方法(Nagle算法),将多次间隔较小.数据 ...

  4. [luogu]P4365[九省联考]秘密袭击coat(非官方正解)

    题目背景 警告:滥用本题评测者将被封号 We could have had it all. . . . . . 我们本该,拥有一切 Counting on a tree. . . . . . 何至于此 ...

  5. 阿里云Linux系统Nginx配置多个域名的方法

    Nginx绑定多个域名,可通过把多个域名规则写一个配置文件里实现,也可通过分别建立多个域名配置文件实现,为了管理方便,建议每个域名建一个文件,有些同类域名则可写在一个总的配置文件里. 1. 比如我想建 ...

  6. Javascript的jsonp原理

    Javascript的jsonp原理   首先JSON是一种基于文本的数据交换方式,或者叫做数据描述格式 当一个网页在请求JavaScript文件时则不受是否跨域的影响,凡是拥有”src”这个属性的标 ...

  7. 【BZOJ 1211】 [HNOI2004]树的计数

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] prufer数列的应用 http://www.cnblogs.com/AWCXV/p/7626625.html 这一题没有节点的度数 ...

  8. java整型byte,short,int,long取值范围大小

     byte 1个字节 short 2个字节 int 4个字节long 8 个字节 varchar 可变长度的非Unicode数据,最长为8000个字符nvarchar 可变长度Unicode数据,最长 ...

  9. 深刻理解Docker镜像大小

    都说容器大法好,可是假设没有Docker镜像,Docker该是多无趣啊. 是否还记得第一个接触Docker的时候,你从Docker Hub下拉的那个镜像呢?在那个处女镜像的基础上.你执行了容器生涯的处 ...

  10. 使用Ant打包Android应用具体解释

    计划写个完整的使用Ant打包Android应用的系列文章.三篇文章.首篇具体介绍採用Ant打包Android应用的流程.列出部分定制问题及其解决方法,第二篇介绍我理解的Ant打包的思路与主要的概念和使 ...