索引的概念

索引是提高查询速度的一种手段。索引有很多种,以下是索引树的结构

要求查询出薪资大于5000的雇员信息,只要在树中找到5000的节点,直接查询该节点右边的数据即可,左边就不用管了,这样提高了查询的效率。

将数据按照索引数据的方式保存需要先创建索引。

基本语法:

CREATE  INDEX  索引名   ON   数据表(字段名);

删除索引:

DROP INDEX 索引名;

注意:系统默认主键使用索引。

复合索引

一个索引在多个字段上创建,就是一个索引作用于多个字段。

例如:CREATE INDEX 索引名 ON 数据表(字段1,字段2);

注意:查询数据使用字段2,此时使用的是全表扫描模式,查询数据使用字段1,此时使用的是索引扫描模式。(此现象叫做索引的最左原则

在Oracle中使用了多个字段,并且是AND 连接的条件,那么字段的顺序不影响扫描的方式(索引扫描),如果是mysql则需要和复合索引的字段顺序一致。使用OR连接条件会导致索引失效,应该使用UNION ALL 代替OR查询。

总结:索引不能随便用。如果一张数据表更新频率太高,更新数据之后需要重新创建索引,这一过程很耗费性能。

Sql的优化*(面试题)

1、对查询进行优化,要尽量避免全表扫描,首先应考虑在进行条件判断的字段上创建索引。(使用索引的数据表不能更新频率太高,否则需要重新再创建索引,耗费性能。)

2、尽量避免在WHERE子句中对字段进行null值判断、对字段进行表达式计算操作、使用!=或<>操作符、使用or来连接条件(如果一个条件有索引一个没有索引),否则将导致引擎放弃使用索引而进行全表扫描。

3、NOT IN 要慎用,否则会导致全表扫描,可用NOT EXISTS代替。

4、模糊查询使用了“%”也会导致索引失效(可以将用户可能输入的关键字使用下拉列表列出来,在数据库中使用全名称查询,比如说:SELECT * FROM emp WHERE job LIKE ‘关键字’)。

5、使用复合索引要满足最左原则,并且应尽可能的让字段顺序与索引顺序一致。

6、UPDATE语句,不要更改全部字段,否则需要重新创建索引,损耗性能

7、对于多张大数据(几百条)的连接(多表连接查询),可以考虑使用程序去实现,尽量不要连接查询(多表查询出现笛卡尔积增加内存开销)。

8、索引不是越多越好,索引提高了select查询的效率,但同时也降低了insert插入及update更新的效率,插入或更新有时可能会重建索引。

9、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这样会降低查询和连接的性能,并且会增加存储的开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型来说只需要比较一次就够了。

10、任何地方都不要使用select *,用具体的字段代替‘*’,不要返回用不到的任何字段。

11、使用慢查询来进行数据库的优化。观察到慢查询的最方便途径是(Spring+Druid)可以轻松的实现,可以观察具体哪些sql语句是执行最慢的,之后再对查询进行优化。

索引+sql优化的更多相关文章

  1. mysql索引sql优化方法、步骤和经验

    MySQL索引原理及慢查询优化 http://blog.jobbole.com/86594/ 细说mysql索引 https://www.cnblogs.com/chenshishuo/p/50300 ...

  2. 数据库的规范和SQL优化技巧总结

    现总结工作与学习中关于数据库的规范设计与优化技巧 1.规范背景与目的 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需 ...

  3. Oracle 建立索引及SQL优化

    数据库索引: 索引有单列索引,复合索引之说,如果某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动在相应的约束列上建议唯一索引.数据库索引主要进行提高访问速度. 建设原则: 1.索引应该经 ...

  4. SQL优化的四个方面,缓存,表结构,索引,SQL语句

    一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...

  5. 浅谈SQL优化入门:3、利用索引

    0.写在前面的话 关于索引的内容本来是想写的,大概收集了下资料,发现并没有想象中的简单,又不想总结了,纠结了一下,决定就大概写点浅显的,好吧,就是懒,先挖个浅坑,以后再挖深一点.最基本的使用很简单,直 ...

  6. SQL优化 MySQL版 - 避免索引失效原则(二)

    避免索引失效原则(二) 注:继上一篇文章继续讲解: 避免索引失效原则(一)https://www.cnblogs.com/StanleyBlogs/p/10482048.html#4195062 作者 ...

  7. SQL优化 MySQL版 - B树索引详讲

    SQL优化 MySQL版  - -B树索引详讲 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太 ...

  8. SQL优化 MySQL版 - 避免索引失效原则(一)

    避免索引失效原则(一) 精力有限,剩余的失效原则将会在 <避免索引失效原则(二)>中连载出来,请谅解 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 避免索引失效的一些原 ...

  9. SQL优化 MySQL版 - 索引分类、创建方式、删除索引、查看索引、SQL性能问题

    SQL优化 MySQL版  - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 索引分类 单值索引 单的意思就是单列的值,比如说有 ...

随机推荐

  1. Redis 主从分离

    首先配置redis.conf文件如下6个位置 cp 多个redis.conf文件 开启daemonize yes PID文件名字 端口 log文件名字 dump.rdb名字 配置: 主机不动,配置从机 ...

  2. Sqlserver2012的数据导入到sqlserver2008或sqlserver2008R2

    我采取的是sql语句的方式 将Sqlserver2012的表结构导出成sql语句,数据也导出成sql语句 一.点击数据库名称右键=========>属性 二.导出表结构与数据为sql语句 htt ...

  3. 实现socketChannel 通信例子

    https://blog.csdn.net/qq_33935895/article/details/79678345

  4. Apt-Cacher-ng 搭建缓存服务器

    docker pull minimum2scp/apt-cacher-ng docker run -d -p 3142:3142 --name=cache -e ACNG_BACKENDS_DEBIA ...

  5. java并发特性:原子性、可见性、有序性

    要想并发程序正确地执行,必须要保证原子性.可见性以及有序性.只要有一个没有被保证,就有可能会导致程序运行不正确. 1.原子性(Atomicity) 原子性是指在一个操作中就是cpu不可以在中途暂停然后 ...

  6. 磁盘存储结构与文件恢复实验(FAT文件系统)

    实验地点:主楼A2-412 一.实验室名称:主楼实验室A2-412                  二.实验项目名称:磁盘存储结构与文件恢复实验 三.实验学时:6学时 四.实验原理: 在Debug环 ...

  7. Laravel 配置文件操作方法

    1)laravel 的所以配置文件都在根目录下的 config 目录里,直接看一个配置文件的名字就知道是做什么的了,这里不说了 2)读取配置的方法 $value = config('app.timez ...

  8. [Selenium]Grid模式下运行时打印出当前Case在哪台node机器上运行

    当Case在本地运行成功,在Grid模式下运行失败时,我们需要在Grid模式下进行调试,同时登录远程的node去查看运行的情况. Hub是随机将case分配到某台node上运行的,怎样知道当前的cas ...

  9. Zookeeper 源码(五)Leader 选举

    Zookeeper 源码(五)Leader 选举 前面学习了 Zookeeper 服务端的相关细节,其中对于集群启动而言,很重要的一部分就是 Leader 选举,接着就开始深入学习 Leader 选举 ...

  10. Oracle学习笔记(三)

    五.操作表 1.表分为行和列 约定:每行数据唯一性,每列数据同类性,每列列名唯一性. 2.数据类型 字符型 -- 固定长度的字符类型 字符类型:CHAR(n)(MAX n=2000).NCHAR(MA ...