• 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)

     

  • 相关阅读:
    2. 利用 FastAPI 开发一个 GET 请求的接口
    软件测试简历怎么写,来聊聊几点通用的准则
    Resonse9_HTTP协议1
    Servlet&HTTP&Request8_登录案例
    Servlet&HTTP&Request8_Request3
    Servlet&HTTP&Request8_Servlet1
    Tomcat&Servlet7_Servlet3
    Servlet&HTTP&Request8_HTTP2
    Tomcat&Servlet7_IDEA与tomcat的相关配置4
    javaScript1389. 按既定顺序创建目标数组
  • 原文地址:https://www.cnblogs.com/dk1988/p/13209270.html
Copyright © 2020-2023  润新知