不管是用C/C++/Java等代码编写的程序,还是SQL编写的数据库脚本,都存在一个持续优化的过程。也就是说,代码优化对于程序员来说,是一个永恒的话题。

近期,我们对之前编写的数据库脚本进行了全面的自查,从数据库的性能方面考虑,将脚本里面的很多SQL语句进行了优化。对于一条SQL语句来说,索引的使用是否正确将直接影响到数据库的性能,因此,对索引使用方法的优化是数据库性能优化的重点。本文对常用的数据库索引优化语句进行了总结,可供相关的开发人员参考。

在本文中,使用如下的表tb_test作为示例进行说明:

create table tb_test
(id       int             not null,age      int             not null, name     varchar(30)     not null,addr     varchar(50)     not null
);
create unique index idx1_tb_test on tb_test(id);
create        index idx2_tb_test on tb_test(name);
create        index idx3_tb_test on tb_test(addr);

索引优化建议
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优化上花费大量的时间。

常用的数据库索引优化语句总结相关推荐

  1. Oracle学习总结(7)—— 常用的数据库索引优化语句总结

    不管是用C/C++/Java等代码编写的程序,还是SQL编写的数据库脚本,都存在一个持续优化的过程.也就是说,代码优化对于程序员来说,是一个永恒的话题. 近期,我们对之前编写的数据库脚本进行了全面的自 ...

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

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

  3. mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  4. ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  5. MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  6. 数据库索引优化原理,索引的工作机制

    我们通过一个简单的例子来开始教程,解释为什么我们需要数据库索引.假设我们有一个数据库表 Employee, 这个表有三个字段(列)分别是 Employee_Name.Employee_Age 和Emp ...

  7. 第6章 数据库索引优化

    6-1 Btree索引和Hash索引 Btree索引--顺序存储- B-Tree索引适合Order By 联合索引 ---------------重点内容 Hash索引 -相对比较快- 等值查询 为什 ...

  8. 数据库索引--SQL语句执行效率、分析及优化

    数据库表中字段上创建的索引,在写SQL语句进行查询时,索引可能会被使用到,也肯能因为SQL语句导致索引在此条SQL语句执行时索引无效. 聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的解释是:索 ...

  9. 架构设计器_MySQL:数据库结构优化、高可用架构设计、数据库索引优化

    一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...

  10. linux数据泵导入command not found_MySQL:数据库结构优化、高可用架构设计、数据库索引优化...

    一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...

最新文章

  1. 【洞见】关于PMP个人认识和理解
  2. wxWidgets随笔(4)-hello,world
  3. Tkinter Helloword !
  4. 编译安装时的--prefix参数的使用方法,很实用,mark一下
  5. git-stash用法
  6. spring hibernate druid mysql_使用Spring4的JavaConfig整合Druid Hibernate4.3
  7. JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5新特性解决办法-范例...
  8. USACO Section 1.1 : Greedy Gift Givers
  9. Windows 8 页面应用测试(1)
  10. javaEE解决eclipse中不能设置tomcat8.5
  11. 字符串匹配算法:从这段代码判断你是不是在大气层
  12. 常见基准电压芯片有哪些
  13. 微信小程序考勤签到管理系统+后台管理系统
  14. Python网络爬虫开发实战,ADSL 拨号代理
  15. Python Pymysql实现数据存储
  16. 安全模式下密码忘记的解决方法
  17. 第一章 C语言程序设计概述
  18. 32位汇编ebp、ebp-4、ebp+4、ebp+8等含义
  19. 【VMware】在VMware ESXi 6.7中创建虚拟机
  20. 【权威发布】360天眼实验室:Xshell被植入后门代码事件分析报告(完整版)

热门文章

  1. html 怎么绘制曲线图,用html5绘制折线图的实例代码_html5教程技巧
  2. 专利进阶(一):软件专利工程师浅谈如何针对计算机软件类专利申请进行技术挖掘
  3. cypress自动化--运行测试用例报告输出
  4. cmmi证书查询(cmmi认证查询网站)
  5. android模拟器电视,AndroidTV 模拟器的搭建
  6. excel常用的数据处理方法
  7. 怎么理解java面向对象
  8. 图像基础ImageMagick图像处理
  9. 2013 VS 2018:五年前和今天的十大数字货币大比拼
  10. 【IDEA主题极致优化】全面优提升你的编码体验