索引的概述
1、索引的概念:索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。
2、索引的作用:
加快数据检索速度:通过索引,数据库系统可以更快地定位到需要的数据,而不必扫描整个表,当表很大或查询涉及到多个表时,可以成干上万倍地提高查询速度。
加速数据排序:索引可以帮助数据库系统快速排序数据,例如在ORDER BY子句中使用索引可以提高排序的效率。
优化连接操作:对连接操作进行优化,特别是在多表连接时,索引可以显著提升查询性能。
约束唯一性:可以使用索引来确保某些列或列组的数值在表中是唯一的,这种约束可以通过UNIQUE索引或主键索引来实现。
降低数据库的IO成本:当没有索引可用时,数据库可能需要进行全表扫描以找到匹配的数据,而有了索引,数据库可以避免或减少全表扫描的情况,大大减少了IO操作的次数和数据量。
3、索引的副作用:
占用存储空间:索引需要额外的存储空间,对于大型表来说,索引可能会占据相当可观的存储空间。
降低写操作性能:当进行插入、更新和删除等写操作时,索引也需要进行维护,这可能导致写操作的性能下降,特别是对于频繁更新的列,索引维护成本较高。
增加维护成本:随着数据的变化,索引的效率也会发生变化,需要定期对索引进行优化和重建,这增加了维护成本。
过多索引影响性能:如果表上存在过多或不必要的索引,会增加查询优化器的选择路径,可能导致性能下降。
可能引起锁问题:在某些情况下,索引可能会引发锁问题,尤其是在并发环境中,需要谨慎处理索引以避免锁竞争。
统计信息不准确:有时候索引的统计信息可能不准确,导致查询优化器做出不恰当的执行计划,从而影响性能。
4、创建索引的原则依据:
表的主键、外键必须有索引,因为主键具有唯一性,外键关联的是主表的主键,查询时可以快速定位。
记录数超过300行的表应该有索引,如果没有索引,每次查询都需要把表遍历一遍,会严重影响数据库的性能。
经常与其他表进行连接的表,在连接字段上应该建立索引。
唯一性太差的字段不适合建立索引。
更新太频繁地字段不适合创建索引。
经常出现在 where 子句中的字段,特别是大表的字段,应该建立索引。
在经常进行 GROUP BY、ORDER BY 的字段上建立索引。
索引应该建在选择性高的字段上。
索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。
5、索引优化:
经常用于查询条件的列:对于经常出现在 WHERE 子句中的列,特别是用作连接条件的列,创建索引可以提高查询性能。
频繁被用来排序的列:如果某些列经常用于排序操作(例如在ORDER BY子句中),为这些列创建索引可以加快排序操作的速度。
用作连接条件的列:在多表连接时,连接条件的列应该建立索引,以提高连接操作的效率。
唯一性约束列:对于需要唯一性约束的列,如主键或UNIQUE约束的列,应当创建唯一索引。
频繁被用于聚合函数的列:如果某些列经常用于聚合函数(如SUM、AVG等),为这些列创建索引可以提高聚合查询的性能。
6、索引的分类:
Btree索引:这是最常见的索引类型,适用于各种数据类型,Btree索引通过对索引列的值进行排序,构建一个类似于树形结构的索引,从而加快数据的检索速度。
哈希索引:哈希索引基于哈希算法构建,适用于等值查询,例如使用=或IN操作符的查询,相比Btree索引,哈希索引在等值查询时具有更好的性能,但不支持范围查询和排序操作。
全文索引:用于全文搜索的场景,例如对文本内容进行搜索,全文索引可以实现对文本内容的关键词搜索,并支持模糊匹配等操作。
空间索引:适用于地理空间数据类型,如Point、LineString、Polygon等,空间索引可以加速地理位置相关的查询,例如查找某个区域内的所有点。
组合索引:即将多个列组合起来创建的索引,可以同时提高多个列的查询效率,特别是在涉及多列的查询条件时。
唯一索引:确保索引列的数值在表中是唯一的,通常用于约束某些列或列组的唯一性。
主键索引:主键索引是一种特殊的唯一索引,用于唯一标识表中的每一行数据。
7、数据文件与索引文件:MySQL数据库的数据文件存放在/usr/local/mysql/data目录下,每个数据库对应一个子目录,用于存储数据表文件,每个数据表对应为三个文件,扩展名分别为“.frm”、“.MYD”和“.MYI”。“.MYD”文件是MyISAM存储引擎专用,存放MyISAM表的数据,每一个MyISAM表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件在一起。“.MYI”文件也是专属于 MyISAM 存储引擎的,主要存放 MyISAM 表的索引相关信息,对于 MyISAM 可以被 cache 的内容主要就是来源于“.MYI”文件中,还有“.ibd”和ibdata文件,这两种文件都是用来存放 Innodb 数据的,之所以有两种文件来存放 Innodb 的数据(包括索引),是因为Innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据,独享表空间存储方式使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件,文件存放在和 MyISAM 数据相同的位置,如果选用共享存储表空间来存
序号 | 索引类型 | 描述 | 优点 | 缺点 |
1 | 主键索引 | 主键唯一标识表中的每一行数据 | 确保数据唯一性,提高查询速度 | 在创建时需要指定,且不能有重复值 |
2 | 唯一索引 | 索引列中的值必须唯一,但允许有空值 | 确保数据唯一性,提高查询速度 | 在创建时需要指定,且不能有重复值 |
3 | 普通索引 | 索引列中的值可以重复,且没有唯一性要求 | 提高查询速度 | 占用更多空间,更新数据时索引也会更新 |
4 | 全文索引 | 用于在文本字段中快速检索内容 | 提高文本搜索速度 | 只能用于MyISAM和InnoDB存储引擎 |
5 | 组合索引 | 在多个列上创建的索引,查询时可以基于索引列进行排序和检索 | 提高查询速度,可以减少索引列的查询范围 | 当查询条件中包含索引列以外的列时,无法利用索引 |
6 | 覆盖索引 | 索引包含了查询所需的全部数据,无需访问数据行 | 提高查询速度,减少I/O操作 | 占用更多空间,更新数据时索引也会更新 |
序号 | 数据库管理操作 | 描述 | 优点 | 缺点 |
1 | 创建数据库 | 创建一个新的数据库 | 方便组织和管理数据 | 需要指定数据库存储引擎和字符集等参数 |
2 | 删除数据库 | 删除已存在的数据库 | 清理空间,释放资源 | 无法恢复已删除的数据库 |
3 | 修改数据库参数 | 修改数据库的存储引擎、字符集等参数 | 优化数据库性能 | 需要重启数据库服务 |
4 | 备份数据库 | 将数据库中的数据备份到其他位置 | 防止数据丢失,便于恢复 | 备份过程可能耗时较长 |
5 | 恢复数据库 | 将备份数据库恢复到指定位置 | 恢复丢失或损坏的数据 | 恢复过程可能耗时较长 |
6 | 权限管理 | 控制用户对数据库的访问权限 | 保障数据安全 | 需要合理分配权限,避免权限滥用 |
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1219568.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复