zoukankan      html  css  js  c++  java
  • nysql高性能索引设计

    为什么数据库中要使用B+tree索引,而不用hash索引?MySQL中的B+tree索引介绍》 

    只有看完以上这篇文章,才会明白为什么下面要这么设计。

    1、能设计成数字类型的,就不要使用varchar,因为比如varchar(20),mysql就一定会开辟20个字节的内存出来,在计算的时候。

    2、需要数字绝对精确的,可以设计Decimal类型,可是该类型在计算的时候对于性能有一定牺牲。decimal存储的是65个数字,以字符形式存储。

    3、数字类型字段,一般情况下bigint(11)  float  double类型就够了。

    4、一个字段标记为unsigned无符号设计和不标记,没有性能上差别,计算起来都是一样的。

    5、如果有blob或者text这种大量字符串存储的字段,可以把该字段独立出来一张新表,用id关联即可。

    6、用enum枚举来替代字符串,但是enum类型order by效率低,需要额外操作。一般建议定义为tinyint类型。

    7、定义主键ID !!! 重要的事情说三遍!因为即使不定义主键,mysql也会默认生成一个隐式主键,还不如有个显式主键,利用主键索引,提高查询效率。

     8、日期类型的设计选择datetime, dateime的时间区间是 1001年 - 9999年,而timestamp的时间区间是 1970年 - 2038年,前者用8个字节存储,后者用4个字节存储。另外datetime跟时区没关联,而timestamp跟时区是有关联的。

         需要注意的是,这两者日期类型都只精确到秒。那怎么存储更精确的时间呢?用 bigint 类型存储时间戳即可。

    9、尽量避免字段存储null,因为mysql在计算null时需要额外开销,所以友好的设计是:not null default

    10、索引命名也很重要,主键索引命名pk_前缀,唯一索引uk_前缀,普通索引 idx_前缀。

    11、是或否的字段,用 is_前缀。

    高性能索引使用策略:

    1.不在索引列上做任何操作。比如upper(索引列)

    2.尽量全值匹配。比如 index_column = 100

    3.最佳左前缀法则。

    4.范围条件放最后

    5.覆盖索引尽量用

    6.不等于要慎用。用的不好就会全表扫描

    7.Null/Not有影响。请参考《mysql5.7字段设计需要为非null,尤其是索引列,原理讲述

    8.Like查询要当心。比如不能 like "%abc" 这样使用

    9.字符类型加引号。比如不要这样使用: where username = 6   mysql会尝试加隐式函数,比如where cast(username) = 6 这样会使索引失效

    10.使用or关键字时要注意

    11.使用索引扫描来做排序

    12.ASC,DESC别混用。就是别混合使用,比如 order by age asc,username desc

    13.尽可能按主键顺序插入行

    14.优化Count查询

    15.优化limit分页。select * from t_user limit 10000,10;  mysql会取出10010条数据后,把前面一万条扔了,返回给你最后10条。可以改成:select * from t_user where id > 10000 limit 10;(推荐)    或者:   select * from (select id from t_user limit 10000,10) b, t_user a where a.id = b.id;

    end.

    支付宝扫一扫,为女程序员打赏!
    作者:梦幻朵颜
    版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    异构数据库同步工具调研
    ubuntu16.04 Golang语言开发环境搭建
    串口USB单一映射及重命名
    linux arm 交叉编译ACE(ubuntu16.04)
    ubuntu16.04 下Mongo数据库搭建
    ubuntu 增加一个用户 并赋予权限
    go 通过http发送图片file内容
    git 简单命令总结
    gitlab ssh_key
    ubuntu16.04 程序开机自启动设置及启动优化
  • 原文地址:https://www.cnblogs.com/zhuwenjoyce/p/14872827.html
Copyright © 2011-2022 走看看