首页 > 数据库 >SQL索引详解

SQL索引详解

时间:2022-10-15 09:44:06浏览次数:40  
标签:SQL 使用 查询 索引 详解 表中 数据 物理

一、什么是索引

 索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的特殊数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到需要的内容

二、索引类型

唯一索引:表上一个字段或者多个字段的组合建立的索引,这些字段组合起来能够确定唯一,允许存在空值(只允许存在一条空值)
非唯一索引:表上一个字段或者多个字段的组合建立的索引,可以重复,不需要唯一
主键索引:(主索引)根据主键pk_clolum(length)建立索引,不允许重复,不允许空值;
聚合索引:表中记录的物理顺序与键值的索引顺序相同
非聚合索引:表中记录的物理顺序与键值的索引顺序无关
全文索引:在某个字段设置全文索引后,根据特定语法查找满足条件的字段;
普通索引:用表中的普通列构建的索引,没有任何限制
组合索引:用多个列组合 构建的索引,但是在使用过程中有诸多规则,遵循最左前缀原则,顺序至关重要
Hash索引(Memory存储引擎)是通过索引列的值计算出hashCode,之后在相应的物理位置存取索引列的值,由于hashCode的唯一性,因此Hash索引不能进行范围查找或者是顺序查找

四、索引的优缺点

优点

通过创建唯一索引可以保证数据库表中每一行数据的唯一性。
可以给所有的 MySQL 列类型设置索引。
可以大大加快数据的查询速度,减少IO次数,这是使用索引最主要的原因。
在实现数据的参考完整性方面可以加速表与表之间的连接。
在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时

缺点

创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加。

索引需要占磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。

当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。

五、索引的使用建议

使用聚集索引的查询效率要比非聚集索引的效率要高,但是如果需要频繁去改变聚集索引的值,写入性能并不高,因为需要移动对应数据的物理位置。
非聚集索引在查询的时候可以的话就避免二次查询,这样性能会大幅提升。
不是所有的表都适合建立索引,只有数据量大表才适合建立索引,且建立在选择性高的列上面性能会更好
在where后使用or,导致索引失效(尽量少用or)
使用like ,like查询是以%开头,以%结尾不会失效
不符合最左原则
如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
5使用in导致索引失效
使用mysql内部函数导致索引失效,可能会导致索引失效。
如果MySQL估计使用索引比全表扫描更慢,则不使用索引

 

标签:SQL,使用,查询,索引,详解,表中,数据,物理
From: https://www.cnblogs.com/lazb/p/16793597.html

相关文章

  • mysql建立索引的原则
    mysql建立索引的原则:1)定义主键的数据列一定要建立索引。2)定义有外键的数据列一定要建立索引。3)对于经常查询的数据列最好建立索引。4)对于需要在指定范围内......
  • 很多优化器详解(原理+代码)
    https://blog.csdn.net/tcn760/article/details/123965374?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-......
  • 肖sir__java__Java访问控制修饰符详解(public、 private、protected 和 friendly)
    1、  1.private用private修饰的类成员,只能被该类自身的方法访问和修改,而不能被任何其他类(包括该类的子类)访问和引用。因此,private修饰符具有最高的保护级别。例......
  • Gerrit 默认数据库 gsql 的操作
    1、查看gerrit网络及端口信息2、登录数据库3、\h查看帮助4、查看表信息......
  • RepVGG论文详解
    RepVGG论文详解RepVGG是截止到2021.2.9日为止最新的一个轻量级网络架构。在我的测试中,其在安霸CV22上的加速效果不如ShuffleNetv2。根据作者的描述,RepVGG是为G......
  • CSPNet论文详解
    摘要1,介绍2,相关工作3,改进方法3.1,CrossStagePartialNetwork3.2,ExactFusionModel4,实验4.1,实验细节4.2,消融实验4.3,实验总结5,结论6,代码解读参考资料......
  • MySQL----语言基础
    MySQL----语言基础语法特点SQL对关键字的大写不敏感SQL语句可以单行或者多行书写,以分号;结束。SQL的注释:--单行注释,--后面一定要加一个空格‘单行注释,可以不用加......
  • PostgreSQL----运行02_insert_data
    ALTERTABLEdepartmentsALTERCONSTRAINTdept_mgr_fkDEFERRABLEINITIALLYDEFERRED;BEGIN;INSERTINTOdepartmentsVALUES(10,'Adminis......
  • PostgreSQL----四个快速脚本
    PostgreSQL----四个快速脚本运行01_create_table.sql创建示例表;--部门信息表CREATETABLEdepartments(department_idINTEGERNOTNULL--部门编......
  • 详解页眉页脚的结构
    关键名词:弄明白这几个关键名词以及设置方法,页眉页脚基本就搞定了。1.节2.首页不同3.奇偶页不同4.链接到前一条页眉解释:1.节word文档默认是一节,通过插入分节符,可以把文档拆分......