高性能MySQL–创建高性能的索引

  •   
  • 3174
  • MySQL
  • 35
  • super_dodo
  • 2017/03/03

索引优化应该是对查询性能优化最有效的手段了。缩影能够轻易将查询性能提高几个数量级。

高性能MySQL

MySQL中当人们谈论索引的时候,多半说的是B-Tree索引,大多数的MySQL引擎都支持这种索引。B-Tree通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同。B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点开始进行搜索。根节点的槽中存放了指向子节点的指针,存储引擎根据这些指针向下层查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,这些指针实际上定义了子节点页中值的上限和下限。最终存储引擎要是是找到对应的值,要么是该记录不存在。B-Tree对索引列是顺序组织存储的,所以很适合查找范围数据。

B-Tree索引适用于全键值、键值范围或键前缀查找。其中键前缀查找值适用于根据最左前缀的查找。全值匹配、匹配最左前缀、匹配列前缀、匹配范围值...

哈希索引是基于哈希表实现,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code).哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。在MySQL中,只有Memory引擎显式的支持哈希索引。当数据表非常大的时候,CRC32()会出现大量的哈希冲突。如果哈希冲突很多的话,一些索引维护操作的代价也会很高。

MySQL的索引类型:B-Tree索引、哈希索引、空间数据索引(R-Tree)、全文索引、分型树索引、聚簇索引、覆盖索引等.

索引的优点:1.索引大大减少了服务器需要扫描的数据量。2.索引可以帮助服务器避免排序和临时表。3.索引可以将随机IO变为顺序的IO。

对于非常小的表,大部分情况下简单的全表扫描更高效。对于大到中型的表,索引就非常有效。

MySQL允许在相同的列上创建多个索引,无论是有意的还是无意的。MySQL需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个的进行考虑,这会影响性能。重复索引是指在相同的列上按照相同的顺序创建的相同类型的索引。应该避免这样创建重复索引,发现以后也应该立即移除。冗余索引和重复索引有一些不同。

维护表有三个主要目的:找到并修复损坏的表,维护准确的索引统计信息,减少碎片。

MySQL优化器使用的是基于成本的模型,而衡量成本的主要指标就是一个查询需要扫描多少行。

到网上看了“100种浪漫告白” ,结果那天在银锭桥,脑子空白只牵了你的手!

高性能MySQL--MySQL架构与历史

高性能MySQL--MySQL基准测试

高性能MySQL--服务器性能剖析

高性能MySQL--Schema与数据类型优化

高性能MySQL--创建高性能的索引

高性能MySQL--查询性能优化

高性能MySQL--MySQL高级特性

高性能MySQL--优化服务器设置

高性能MySQL--操作系统和硬件优化

高性能MySQL--复制

高性能MySQL--可扩展的MySQL

高性能MySQL--高可用性

高性能MySQL--云端的MySQL

高性能MySQL--应用层优化

高性能MySQL--备份与恢复

高性能MySQL--MySQL用户工具