zoukankan      html  css  js  c++  java
  • MYSQL 优化(二),持续更新收藏

    索引部分

    1:联合索引如果能覆盖索引 会省去回表操作 效率大大提高

    所以select的字段 尽量只查询联合索引里面的字段

    2:只为搜索,排序,分组的字段建立索引

    3:列基数过小的 就不需要索引了 效率不高 比如sex性别这种

    4:索引列的字段尽量要小 比如tinyint char(8) 这样

    索引占用的存储空间就越少,在一个数据页内就可以放下更多的记录,从而减少磁盘I/O带来的性能损耗,也就意味着可以把更多的数据页缓存在内存中,从而加快读写效率

    5:对于超长字段 比如name 其中有的字段很长比如“阿里马叉挖啦啦啦啦” 可以只对字符前几个字符进行索引 比如name(10)这样效率比较可观

    6:去掉一些冗余索引 

    比如 

    KEY idx_name_birthday_phone_number (name(10), birthday, phone_number),

    KEY idx_name (name(10))

    上面的联合索引 已经可以对name进行排序了 下面一个则多余了

    7:hash索引一般用于唯一性字段(也不一定非要唯一 但重复性比较高的字段使用hash增删改查性能都不怎么好)的索引比较好 且没范围查询需求,排序需求

    比较好的例子就比如微信的openid之类

    否则还是b+索引

    8:尽量不要使用null列  会导致mysql优化器无法选择最优策略,(null可以是都不相同,也可以是一个值,也可以等于没有值)

    9:in查询

    (1)Table pullout (子查询中的表上拉)

    比如 SELECT * FROM s1 WHERE key2 IN (SELECT key2 FROM s2 WHERE key3 = 'a');

    如果key2为s2的唯一索引列 

    那么上面查询就等同于一个内连接查询

    select * from s1 inner join s2 on s1.key2 =s2.key2 where key3='a'  

    这时候mysql优化器就可以使用内连接的优化规则(如选择左连还是右连)还自动优化

    所以对我们而言,可以尽量保证in 的查询字段在子查询中是唯一索引列,会极大的提升新能

    (2)任意in查询其实都可以转为exsits来尝试 (感觉像mysql优化器的问题)

    (3)

     

  • 相关阅读:
    做的一个HTML表白页面
    C语言--乱写C语言
    算法学习-带分数
    算法学习--兰顿蚂蚁
    算法学习---一个博弈问题
    数据结构学习--稀疏矩阵的三元组表示
    【Java初探外篇02】——关于静态方法与实例方法
    【Java初探实例篇01】——Java语言基础
    【教程知识向】——关于环境变量以及配置
    【java初探外篇01】——关于Java修饰符
  • 原文地址:https://www.cnblogs.com/dk1988/p/13209270.html
Copyright © 2011-2022 走看看