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)

     

  • 相关阅读:
    MAC OSX 下 使用openssl 命令 生成RSA公钥和私钥
    iOS 高效开发-----延时执行用GCD
    iOS 高效开发-----实现description 方法 (续)
    iOS 高效开发-----实现description 方法
    ios 高效开发-----字面量
    利用脚本打包的动态库 在打包发布时出现得问题解析 ERROR ITMS-90362等
    打包framework 涉及到得架构问题
    XCode 6 制作framework
    【Mac软件推荐】终端常用者的萌物Go2Shell
    项目总结吧
  • 原文地址:https://www.cnblogs.com/dk1988/p/13209270.html
Copyright © 2011-2022 走看看