zoukankan      html  css  js  c++  java
  • Mysql中的索引问题

    索引的用途

    提高查询的效率,相当于在字典中建立的字母表或者偏旁部首表,这样查询当然比一行一行查询要快的多

    每个存储引擎可以建立索引的长度是不一样的,但每个表至少支持16个索引,总的索引长度至少为256个字节。大多数存储引擎有更高的限制。

     

    创建删除索引

    create index index_name [USING index——type] on table_name(index_col_name)

    其中:index_col_name: col_name[(length)] [ASC | DESC]

    删除:drop index index_name on tabel_name

    索引的类别:

    Mysiam和Innodb存储引擎默认的都是BTEE索引。

    而MEMORY存储引擎支持HASH索引,hash索引的问题是:只能使用=或者

    <=>操作符比较,用于Order by不能使用索引。

    查看索引使用的情况

    mysql> show status like 'Handler_read%';

    其中Handler_read_key代表一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使用。Handler_read_rnd_next代表在数据文件中读下一行的请求次数,如果大量的扫描表的话,此值将很高,此时应该建立索引,或者当前的索引建立不合理,需要重新建立索引。

    +-----------------------+-------+

    | Variable_name | Value |

    +-----------------------+-------+

    | Handler_read_first | 1 |

    | Handler_read_key | 141 |

    | Handler_read_next | 12 |

    | Handler_read_prev | 0 |

    | Handler_read_rnd | 24 |

    | Handler_read_rnd_next | 495 |

    设计索引的原则:

    搜索的索引列,不一定是所要选择的列,即最合适索引的列是出现在where子句中的列,或者连接子句中指定的列,而不是出现在select关键字后的选择列表中的列。

    使用唯一的索引。索引列的基数越大,就是不同的列越多,索引的效果就越好。

    使用短索引、前缀索引。对于大的字符串来说,只要指定前面的一些字符来建立索引即可,因为索引也是需要磁盘空间的。

    使用最左索引,就是建立索引时写在第一个位置的列。

    不要过度使用索引:索引的建立生成都要占据额外的磁盘空间,并降低写操作的性能。在修改表的使用,索引也必须更新。只要保持所需的索引有利于查询优化

    注意点:

    当建立复合索引的时候,一般查询条件中使用到最左的索引列,索引会被使用

    当查询条件中使用like关键字时,%不能放在开头,否则不会使用索引。

    当查询条件中使用or关键字时,应该每个查询条件都有独立的索引

  • 相关阅读:
    VS 高级版本新建的项目如何降级使低版本 VS 可以打开
    Windows下安装VScode,并使用,以及中文配置
    使用Cadence绘制PCB流程
    VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
    如何对Redis设置密码,提高安全性
    关于redis启动流程介绍
    Redis笔记,安装和常用命令
    阿里云主机(aliyun-Linux) x64安装Redis详解
    几款开源的图形化Redis客户端管理软件
    redis配置文件redis.conf中文版(基于2.4)
  • 原文地址:https://www.cnblogs.com/wxl-dede/p/5023253.html
Copyright © 2011-2022 走看看