学习笔记—MySQL(十九)——索引的创建与设计原则

索引的创建和设计原则是数据库管理的重要组成部分,直接关系到查询效率和数据库性能。
创建索引时,必须考虑何时合适以及哪些字段适合建立索引。
创建索引有3种方式,删除索引时要注意不同索引的特殊规则。
MySQL8.0引入了新的特性,并且对索引设计原则提供了明确的指导。
创建索引的理想条件包括以下11个条件:1、字段唯一,建议添加唯一索引,以保证数据完整性和查询效率。
2.在经常用作WHERE子句的字段上使用索引可以大大提高查询速度。
3、group和sequence字段常用于对索引序列数据进行排序和分组。
4、对于WHERE条件列的UPDATE和DELETE操作,创建索引可以提高查询效率。
5.DISTINCT字段,创建索引可以提高约简效率。
6、用JOIN连接多表时,要注意字段类型的一致性,并创建索引,以方便查询。
7、使用小类型创建索引,减少存储空间,提高恢复效率。
8.使用字符串前缀创建索引,以节省空间并减少比较时间。
9.方差高的列适合作为索引,当它们指向在一起时,将它们放在前面。
10.最常用的列按照左前缀原则放置在左侧。
11.在多个字段上创建索引时,共享索引比单值索引更好,以避免重复使用单个索引。
创建索引的缺点包括数据量小、大量重复数据、经常更新的表、无序值作为索引等。
另外,应限制索引的数量,避免过多影响性能。
删除不再使用或很少使用的索引……并删除冗余或重复的索引,以优化数据库性能和管理。
一般来说,索引设计查询条件,考虑数据属性、表大小、存储空间和更新效率应该实现更好的查询性能和数据库管理。

如何合理创建Oracle数据库索引的3个要求

创建合理的Oracle数据库索引的三个要求:在Oracle数据库中,创建索引是比较简单的。
但明智地创建索引更加困难。
笔者认为,创建索引时要做三件事,即在适当的表和列上创建适当数量的索引。
虽然这可以用一句话概括为优化索引的基本原理,但这样做需要数据库管理员付出相当大的努力。
具体来说,要实现这三个适当的要求,有以下要求。
1.根据表的大小创建索引。
虽然在表上创建索引可以提高查询效率。
然而,数据库管理员应该记住,索引也需要一定的开销。
这并不意味着在所有表上创建索引都会提高数据库性能。
这种理解是错误的。
相反,如果不管情况如何都为所有表创建索引,则会对数据库的性能产生负面影响。
因为此时滥用索引的成本可能远远超过其带来的性能收益。
因此,笔者认为数据库管理员应该首先为适当的表创建索引,而不是为所有表建立索引。
一般来说,较小的表不需要创建索引。
例如,在ERP系统数据库中,部门表用于存储公司部门的信息。
一般来说,一个企业只有十几个零件,最多不会超过一百个。
这100条记录对于人们来说可能会觉得太多了。
但对于计算机来说,这还不够。
因此,类似的小表不需要创建索引。
因为即使创建了索引,其性能也不会提高多少。
相反,创建索引的开销,比如维护成本等,却比这个更大。
换句话说,付出的比得到的多绝对是违反常识的。
另外,即使对于非常大的表,也没有必要创建索引。
有些表虽然比较大,但是记录数量却非常多。
但此时为这张表创建索引并不一定合适。
比如系统中有一张表,主要用来存储数据库的一些变化信息。
通常,此信息仅对数据库管理员可用。
此时不适合为该表创建索引。
由于该表很少使用,因此只有在出现问题时才应该检查它。
第二,即使查,也没有太多记录可以找,可能是上周的更新数据等等。
对于一些非常大的表,创建索引有时可能达不到预期的果。
而且,在表上创建索引的成本比普通表要高得多。
那么是否对大表创建索引笔者认为主要取决于两个方面?首先,我们需要关注这张大表中经常需要查找的记录数量。
一般来说,如果要频繁搜索的数据不超过10%到15%,那么就不需要建立索引。
因为此时建立索引的成本可能远远超过性能的提升。
本报告仅是一个经验数据。
如果数据库管理员需要得出更准确的结论,那么就需要进行测试分析。
也就是说,数据库管理员应该测试一次全表扫描的时间,看看它比索引后的查询时间是长还是短。
如果很长,说明需要创建索引。
但如果不是,则说明全表扫描速度更快。
此时无需创建索引。
总之,在考虑是否为表创建索引时,一般情况下,小表不需要创建索引。
对于印表,需要对现状进行实际分析。
更简单地说,可以根据一个大概的比例来确定。
如果想要更精确,可以执行全表扫描性能分析,以确定索引创建是否确实按照预期提高了数据库性能。
2.根据列特征创建索引。
列的属性不同,创建索引的效果也不同。
数据库管理员必须知道要对哪些列建立索引,才能达到事半功倍的效果。
同时,你还需要弄清楚在哪些列上创建索引,但这会产生事半功倍的效果。
这对他们来说是好事……什么样的字段应该被索引?根据作者的经验,在具有以下特征的列上创建索引往往可以产生更明显的效果。
例如,对于一些重复内容较少的列,尤其是那些定义了唯一约的列。
在这些列上创建索引通常可以产生非常好的结果。
例如,如果某些空值列与非空值列混合在一起,如果用户需要频繁搜索所有非空值记录的列,最好为其设置索引。
如果经常需要对多个表进行联接查询,那么在用于联接的列上放置索引可以达到事半功倍的效果。
可见,索引放置是否合适,不仅关系到数据库设计的架构,还关系到企业的经济业务。
为此,对于一些套装软件,虽然数据库管理员在一开始就已经做好了优化索引的工作。
但随着后续经济数据的增多,这一指标的效果将越来越大打折扣。
这主要是因为数据表格式影响索引优化效果。
因此,笔者建议所有数据库管理员,即使使用各大软件公司的软件包,在一段时间后也应该对数据库索引进行优化,比如一年。
删除需要删除的内容,修复需要修复的内容,以提高数据库性能。
例如数据库中有一张表,使用来存储用户信息。
有一个字段ID号,这是一个唯一的字段。
在数据库设计的时候,就为该字段创建了索引。
但当这个数据库投入使用时,用户很少输入自己的身份证号码。
通常我们不会使用这个号码来提问。
当记录逐月增多时,这个ID号上的索引字段不但不能提高数据库查询性能,反而变得毫无用处。
对于这些有很多NULL值并且不经常请求所有非NULL值数据的列,必须指定数据库管理员清除这些列上的索引。
因此,指标的优化和调整是一个动态的过程。
并不是说数据库设计好之后就不需要调整。
数据库管理员常常需要根据数据的变化做出适当的改变。
以提高索引性能。
3.一个表上应该创建多少个索引虽然一个表上创建的索引数量没有限制,但是不是越多越好吗?换句话说,在创建索引时,1+1>2往往是不成立的。
有时,创建更多索引可能会产生相反的效果。
那么一张表应该创建多少个索引呢?这没有明确的标准吗?相反,数据库管理员必须根据数据库中记录的实际使用情况和情况做出判断。
一般来说,表的索引越多,查询的速度就越快。
但是,表的更新速度会降低。
这主要是因为表更新(例如向表中插入记录)的速度随着索引的增长而增加。
这主要是因为当数据更新时,相应的索引信息也必须更新。
为此,在表上创建多少个索引需要在更新速度和查询速度之间取得平衡。
例如,对于一些数据仓库或者决策数据库系统,主要用于查询。
链接记录经常在数据库初始化期间被刷新。
这时,部署更多的索引可以提高数据库的查询性能。
同时,由于数据很少更新,即使索引很多,更新速度也不会受到影响。
即使需要先导入大量数据,也可以先禁用索引。
等待数据导入后再启用索引。
通过这种方式可以减少索引对数据更新的影响。
相反,如果那些表中的数据经常需要更新,比如一些事务性应用系统,数据更新操作就很常见。
此时,如果表上创建过多的索引,就会影响更新速度。
由于更新操作比较频繁,因此对其带来的负面影响远大于查询效率的提升。
这时候就应该限制索引的数量,只在少数必要的字段上创建索引。
我平时优化数据库的时候,经常会根据这些...的目的是设置索引专栏。
可以查询相关的动态视图,看看是更新操作(包括更新、删除、插入等)在该表的操作中占比较大还是查询操作占比较大。
当过多的索引影响了更新操作的速度时,数据库管理员应该禁用一些索引以提高数据库性能。
简而言之,在适当的表和列上创建适当的索引。
这句话包含很多意思,以上内容只是其中的一部分。
俗话说,师父带路,修行靠自己。
作者在这里指的是我能点击的范围。
一些具体的索引优化内容还需要读者在日常工作中去体会和消化。

三大准则11个技巧,手把手教你创建数据库索引

创建有效的数据库索引需要遵循三个关键准则和11条建议,以确保最佳的查询性能和数据保留效率。
本文以B+树索引来详细分析索引创建的最佳实践,同时也指出了不同索引类型的相关条件和限制。
第一的,索引创建应该基于工作负载而不是建表,以确保数据库执行的所有SQL语句都是一致的。
第二,索引创建应考虑SQL结构以优化数据放置。
最左优先原则指导如何高效利用索引快速查找数据,范围条件帮助快速访问数据。
避免查询中的排序是使用索引的关键。
对于分区表,本文深入讨论创建和维护区域分区的方法。
此外,使用功能索引和条件索引以及索引组合技术是提高查询性能的有效方法。
通过在外键上创建索引;表连接性能可以显着提高,尤其是在支持索引的数据库中。
最后,确保最佳整体系统性能的指标数量;创建索引时需要考虑限制,包括磁盘空间使用和写入性能影响。
综合应用上述原理和技术;可以实现数据库索引的优化配置;从而提高查询性能和数据存储效率。