mysql 索引机制

Chapter 4. Indexes
索引有助于MySQL在浩如烟海的数据中迅速找到和取得正确的记录。

4.1 Indexing Basics

4.1.1 Index Concepts
索引是按照某种规则排序的。索引也就是牺牲一些空间和cpu的开销来使你的查询跑得更快点。另外提醒的是,对于MySQL来讲,术语“Key”和“Index”是可以互相替换的。

4.1.1.1 Partial indexes
索引是以空间换取性能。但有时候不想耗费太多的空间的话,MySQL有一系列控制索引空间的方法。例如你可以控制索引字节,采取部分索引的方法,当然这样性能会降低一些。
ALTER TABLE phonebook ADD INDEX (last name(4))

4.1.1.2 Multicolumn indexes
使用多列索引的原因在于:MySQL will only ever use one index per table per query。

4.1.1.3 Index order
MySQL无需人工干预索引的排序,它会处理得很好。

4.1.1.4 Indexes as constraints
唯一索引(unique index)标明在给定的列里特值只能出现一次。唯一索引有两个作用:一个就是帮助查询迅速定位;二就是当插入或更新时,保证列里的值的唯一性。这就意味着,在这里,唯一索引起到了约束的作用。
ALTER TABLE phonebook ADD UNIQUE (phone number)

4.1.1.5 Clustered and secondary indexes
聚集索引(clustered index)将主键和记录直接挂钩,而且记录是根据主键来排序的。每一个表只能有一个聚集索引,这很好理解,因为记录只能用一种方法来排序。当你通过主键 来查询数据的时候,聚集索引非常快。因为它只要一次查询就可以得到结果,而标准的MyISAM的索引需要两次查询,先查到索引,然后通过索引得到的位置再 去查数据。

4.1.1.6 Unique indexes versus primary keys
主键其实就是一种不能包括数值NULL的唯一索引。主键对于MyISAM引擎不是必需的,但对于InnoDB 和BDB引擎来讲是必需的,如果你不声明,他们会隐含添加一个主键

4.1.1.7 Indexing NUL Ls

4.2 Index Structures
这一节作者不会深究细节,他只想解决这几个问题:那种索引类型速度最快?那种灵活性最好?那种占用的空间最少?

4.2.1 B-Tree Indexes
B-Tree(balance tree)是目前最流行的索引类型,因为它在灵活性,空间占用和综合性能都比较优异。

B-Tree顾名思义就是树形结构,每个节点按照索引的数值来安排。因为是balance吗,所以在添加和去除节点后,B-Tree也不会失去平衡,它会自动调节。这种结构的好处就在于即使在最坏的情况下仍然可以得到比较好的性能。

4.2.2 Hash Indexes
哈希索引比较像一个哈希表,相对于树形结构来讲它显得比较“平”。它先将Key经过哈希函数处理,然后将处理过的哈希值除一个很大的质数(比 如:35149),再根据余数将key分别归到不同的容器里。它的缺点在于缺乏灵活性和可预见性。这很容易理解,因为即使两个非常相似的key经过哈希函 数处理以后,它们的值也大为不同。

4.2.3 R-Tree Indexes
R-Tree索引在MySQL4.1版本中才出现,它主要用于空间和多维数据。

4.3 Indexes and Table Types
这一节主要将各种索引在不同存储引擎下的实现和一些应当注意的优化。

4.3.1 MyISAM Tables
除了B-Tree带来的好处之外,MyISAM还提供了两个重要的功能:prefix compression 和packed keys。

4.3.1.1 Delayed key writes
MyISAM提供的一个提高性能的功能,它可以延迟将索引数据写到磁盘上的操作。这将在相当程度上提高在繁忙INSERT, UPDATE ,和DELETE活动下 Mysql的性能。它的缺点在于当MySQL崩溃时,索引数据不会同步,这样的话之后将要重建索引,这会多花一些时间。

4.3.2 Heap Tables
Heap Tables起初只支持哈希索引,现在4.1.0版本也支持B-Tree了。将B-Tree的灵活性和Heap Tables的速度结合起来,这样的性能无人能敌。

4.3.3 BDB Tables
BDB Tables只提供B-Tree索引。

4.3.4 InnoDB Tables
InnoDB Tables提供B-Tree索引。

4.3.5 Full-Text Indexes
全文索引是一个特殊类型的索引,它可以迅速定位一个字段中不同字的位置。MySQL在MyISAM中提供全文索引支持。全文索引基于表中的文本字段(例如:VARCHAR, TEXT 等等)。全文索引存于表的MYI文件中。

4.3.6 Index Limitations
索引不是万能的,让我们这节来看看他的弱点。

4.3.6.1 Wildcard matches
先看个例子:
select phonenumber from phone book where last_name like “%son%”
这种通配符匹配,MySQL只能搜索每一列来得到答案,这时候索引也不会起到作用。

4.3.6.2 Regular expressions
正则表达式和通配符匹配遇到同样的问题。

4.3.6.3 Poor statistics or corruption
好像是废话,索引损坏了要及时修复的。

4.3.6.4 Too many matching rows
如果MySQL相信大约有30%的列匹配的话,他就不会用索引而去进行全表检索。当然也有例外,具体的可以去看第五章。

4.4 Index Maintenance
治大国若烹小鲜,同样,索引不需要特别的维护。

4.4.1 Obtaining Index Information
一些基本信息的获取
SHOW CREATE TABLE
SHOW INDEXES FROM

4.4.2 Refreshing Index Statistics
对于MyISAM来讲,OPTIMIZE TABLE 可以重建表的索引,并且是索引处于一个良好的状态。但是这种优化要花一些时间,此时表处于写锁定状态。对于BDB 和InnoDB来讲,他们不需要这些调整。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL索引机制和原理是MySQL数据库中非常重要的部分,它对于提高查询性能和加速数据检索非常关键。下面是MySQL索引机制和原理: 1. 索引的作用:索引是一种数据结构,用于加速数据的查找和访问。它可以帮助数据库快速定位到需要查询的数据,减少全表扫描的开销。 2. B-Tree索引MySQL使用B-Tree(平衡树)数据结构来实现索引。B-Tree索引是一种多级树结构,具有平衡性和高效性能。在B-Tree索引中,每个节点存储多个键值对,并按照键的顺序进行排序。 3. 索引类型:MySQL支持多种索引类型,包括主键索引、唯一索引、普通索引和全文索引等。主键索引是一种唯一性索引,用于唯一标识表中的记录;唯一索引用于确保某列或多列的值唯一;普通索引用于提高查询性能;全文索引用于全文搜索。 4. 索引选择:在创建索引时,需要根据实际需求选择合适的列进行索引。通常选择经常用于查询、范围查询或连接操作的列作为索引列。 5. 索引优化:索引的优化是提高查询性能的重要手段。可以通过合理设计索引、避免过多的索引、定期更新统计信息、避免在索引列上进行函数操作等方式来优化索引。 6. 索引失效:索引的失效指的是查询不能有效地使用索引进行加速,而需要进行全表扫描。常见的索引失效情况包括使用了函数操作、模糊查询时以%开头、对索引列进行类型转换等。 总之,MySQL索引机制和原理是数据库中重要的概念,合理使用和优化索引可以大大提高数据库的查询性能和数据检索速度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值