mysql性能优化

来源:互联网 发布:excel2007筛选重复数据 编辑:程序博客网 时间:2024/05/18 12:35

https://www.zhihu.com/question/19719997


存储的ip地址使用mysql INET_ATON(‘IP地址’)转化为无符号整形

修改数据库存放ip地址类型为无符号



索引

当表添加索引是否被使用的查看方法是

explain +查询语句



key表示使用的索引名称

索引类别

normal 普通

Unique 唯一

full text 用于很长文本

注:当where条件中有两种不同类型索引时,索引会失效

索引方法区别

1).如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;
    2).从示意图中也能看到,如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索;
    3).同理,哈希索引也没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询);
    4).哈希索引也不支持多列联合索引的最左匹配规则;
    5).B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大,在有大量重复键值情况下,哈希索引的效率也是极低的,因为存在所谓的哈希碰撞问题。


    在MySQL中,只有HEAP/MEMORY引擎表才能显式支持哈希索引(NDB也支持,但这个不常用),InnoDB引擎的自适应哈希索引(adaptive hash index)不在此列,因为这不是创建索引时可指定的。
    还需要注意到:HEAP/MEMORY引擎表在mysql实例重启后,数据会丢失。
    通常,B+树索引结构适用于绝大多数场景,像下面这种场景用哈希索引才更有优势:
    在HEAP表中,如果存储的数据重复度很低(也就是说基数很大),对该列数据以等值查询为主,没有范围查询、没有排序的时候,特别适合采用哈希索引

0 0
原创粉丝点击