什么是数据库的索引功能

什么是数据库的索引功能,第1张

优点:

1、大大加快数据的检索速度;

2、创建唯一性索引,保证数据库表中每一行数据的唯一性;

3、加速表和表之间的连接;

4、在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。

缺点:

1、索引需要占物理空间。

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

发展历史:

索引最早出现于西方,主要是中世纪欧洲宗教著作的索引。18世纪以后西方开始有主题索引,至19世纪末,内容分析索引被广泛使用。中国的索引出现较晚。一般认为,明末傅山所编的《两汉书姓名韵》是现存最早的人名索引。清代乾嘉时期,章学诚曾力倡编纂群书综合索引。

20世纪20年代,随着西方索引理论与编制技术的传入,中国现代意义上的索引编制与研究才蓬勃展开 。1930年钱亚新发表《索引和索引法》,1932年洪业发表《引得说》,标志着具有中国特色的现代索引理论、技术已迅速发展起来。

20世纪50年代,计算机技术被运用于索引编制 。此后,机编索引的大量出现,使索引编制理论、技术、索引载体形式发生了深刻变革。

SQL标准中没有涉及索引,但商用关系数据库管理系统一般都支持索引机制,只是不同的关系数据库管理系统支持的索引类型不尽相同。

索引已经成为关系数据库非常重要的部分。它们被用作包含所关心数据的表指针。通过一个索引,能从表中直接找到一个特定的记录,而不必连续顺序扫描这个表,一次一个地去查找。对于大的表,索引是必要的。没有索引,要想得到一个结果要等好几个小时、好几天,而不是几秒钟。

索引用于快速找到特定一些值的记录。如果没有索引,MySQL就必须从第一行记录开始读取整个表来检索记录。表越大,资源消耗越大。如果在字段上有索引的话,MySQL就能很快决定该从数据文件的哪个位置开始搜索记录,而无须查找所有的数据。如果表中有1000条记录的话,那么这至少比顺序地读取数据快100倍。注意,如果需要存取几乎全部1000条记录的话,那么顺序读取就更快了,因为这样会使磁盘搜索最少。

大部分MySQL索引(PRIMARY KEY, UNIQUE,INDEX 和 FULLTEXT)都是以B树方式存储。只有空间类型的字段使用R树存储,MEMORY (HEAP)表支持哈希索引。

字符串默认都是自动压缩前缀和后缀中的空格。

通常,如下所述几种情况下可以使用索引。哈希索引(用于 MEMORY 表)的独特之处在后面会讨论到。

想要尽快找到匹配 WHERE 子句的记录。

根据条件排除记录。如果有多个索引可共选择的话,MySQL通常选择能找到最少记录的那个索引。

做表连接查询时从其他表中检索记录。

想要在指定的索引字段 key_col 上找到它的 MIN() 或 MAX() 值。优化程序会在检查索引的

key_col 字段前就先检查其他索引部分是否使用了 WHERE key_part_# = constant 子句。这样的话,

MySQL会为 MIN() 或 MAX() 表达式分别单独做一次索引查找,并且将它替换成常数。当所有的表达式都被替换成常数后,查询就立刻返回。如下:

SELECT MIN(key_part2),MAX(key_part2) FROM tbl_name WHERE key_part1=10;

对表作排序或分组,当在一个可用的最左前缀索引上做分组或排序时(如 ORDER

BY key_part1, key_part2)。如果所有的索引部分都按照 DESC 排序,索引就按倒序排序。

有些时候,查询可以优化使得无需计算数据就能直接取得结果。当查询使用表中的一个数字型字段,且这个字段是索引的最左部分,则可能从索引树中能很快就取得结果:

SELECTkey_part3FROMtbl_nameWHEREkey_part1=1

假设有如下 SELECT 语句:

如果在 col1 和 col2 上有一个多字段索引的话,就能直接取得对应的记录了。

MYSQL在创建索引后对索引的使用方式分为两种:\x0d\1 由数据库的查询优化器自动判断是否使用索引;\x0d\2 用户可在写SQL语句时强制使用索引\x0d\\x0d\下面就两种索引使用方式进行说明\x0d\第一种,自动使用索引。数据库在收到查询语句后会查看where语句后面的查询条件,同时查看在表上面有哪些索引,然后根据查询条件和索引进行匹配。\x0d\查询条件和索引的匹配包括查询字段与索引字段的匹配和查询类型和索引类型的匹配。前者很好理解,就是查询条件的属性上要建有索引,后者则是说查询条件必须能够使用索引,比如等值判断和范围查询可以使用B+树索引,而hash索引只能适用于等值判断。\x0d\在找到与查询条件匹配的索引后,就是进行代价估计来决定是否使用索引,代价估计主要根据要访问的就数量,一般来说如果通过索引访问的记录数量占全表记录数量15%以上,则不会使用索引而是使用全表扫描,因为此时使用索引的代价更大。在大多数情况下使用索引是会提高效率的。\x0d\经过优化器的判断,最终会决定是否使用索引\x0d\ \x0d\第二种,强制使用索引,主要是通过SQL语句实现的\x0d\select from table force index(PRI) limit 2;(强制使用主键)\x0d\select from table force index(ziduan1_index) limit 2;(强制使用索引"ziduan1_index")\x0d\select from table force index(PRI,ziduan1_index) limit 2;(强制使用索引"PRI和ziduan1_index")\x0d\也可以禁止索引的使用\x0d\select from table ignore index(PRI) limit 2;(禁止使用主键)\x0d\select from table ignore index(ziduan1_index) limit 2;(禁止使用索引"ziduan1_index")\x0d\select from table ignore index(PRI,ziduan1_index) limit 2;(禁止使用索引"PRI,ziduan1_index")

以上就是关于什么是数据库的索引功能全部的内容,包括:什么是数据库的索引功能、MySQL数据库优化(七):MySQL如何使用索引、mysql添加索引后在查询的时候是mysql自动从索引里面查询还是查询的时候有单独的参数查询索引等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10186075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存