四时宝库

程序员的知识宝库

高性能Mysql-第5章(高性能mysql和mysql必知必会)

第5章 创建高性能的索引

正文:

1.索引(key):是存储引擎用于快速找到记录的一种数据结构。

2.索引优化应该是查询性能优化最有效的手段了。(数据量越多越明显)

3.原理:

  • 在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行。(固态硬盘中,索引原则依然成立)

4.索引中如果包含多个列,那么顺序非常重要,mysql只能高效的使用左前列。

5.索引是在存储引擎层实现的(所以各种引擎实现方式不一样,没有特殊指定InnoDB)。(mysql 大致可分为三层,最低层是存储引擎)

6.mysql支持的索引类型:

  • BTree(大多数是这个):所有的值是按照顺序存储的,并且每一个叶子页到根的距离是相同的。每一个页都用指向下一个页的指针。
  • InnoDB根据主键饮用被索引的行,MyISAM使用前缀压缩技术使得索引更小。
  • 哈希索引:用所用的索引列计算一个hash值然后存放在索引中,当查的时候先将键算出哈希吗,通过哈希吗匹配到对应的行引用,所以只用精确匹配所有列才会生效。
  • 哈希索引的优点:索引存储的是哈希所以非常小。一旦适用哈希,性能提升非常显著。查找非常快。(等值查找)
  • 哈希索引的缺点:只支持全匹配的等值比较,不支持范围。哈希冲突会影响性能。(计算不一样的值的哈希值相同)

7.BTree优点:不用全表扫描来获取需要的数据,只用从索引的根节点开始搜索。

8.BTree是顺序存储的,很适合做键值范围,全键值,键前缀。(在xx和xx之间的数据)

9.如果不是从最左列开始查找,则无法使用索引。(key(a,b,c)直接查找b 中的值)

10.如果查询中有某个列使用的是范围查找,那么在此右边的索引将无法使用索引优化。(如a like ‘’ and b =‘’那么 b 就不能优化)

11.在实际情况中有可能由于顺序问题 ,要在相同的列上建立不同的索引顺序。

12.InnoDB有“自适应哈希索引”:对于某一个索引被频繁的时候,就会在BTree的基础上建立一个哈希索引。这样使用这个索引的查找会自动的将这个列进行哈希计算,然后到新建的哈希索引中查找。

13.自定义哈希索引:在表中添加一个字段,这个字段是想要被索引的列的哈希计算值,然后建立BTree索引,在搜索的时候值需要使用函数进行计算。where URL=CRC32(“xxxx”)适用于比较长的值列作为索引。(函数使用 不要使用 sha1()md5()因为计算的值比原来的还长)

14.处理哈希冲突:可以在查找的后面添上 and 对应非索引列=‘’。哈希冲突会返回多个值,可以根据后面的筛选出正确的值。

未完待续。。。。。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接