zoukankan      html  css  js  c++  java
  • mysql索引使用笔记

    1.使用explain语句查看性能mysql> explain select product_id from orders where order_id in (123, 312, 223, 132, 224) G

    2.为什么要创建组合索引呢?如果只有一个索引,2个查询条件的语句中会先去索引查询一个条件,然后mysql要去磁盘上的表里面去查询另一个条件。如果有组合索引的话,mysql可以完全从索引中取到2个查询条件,速度自然会快

    3.组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到;即使出现在select里而不是出现在where里也没关系,但是必须要出现;where语句中的顺序没有关系,因为它会自动根据匹配的索引顺序而调整

    4.在mysql中执行查询时,只能使用一个索引,如果我们在where条件上分别建多个索引,执行查询时,mysql会选择一个最严格(获得结果集记录数最少)的索引,所以同样SQL的查询也有可能会用到不同的索引,根据返回的数据集的大小来决定。

    5.在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边

    6. ORDER BY 中的字段必须按照SQL语句中的顺序来建索引;

    7. ORDER BY 中的字段的排序顺序必须一直,否则索引无效。
    8. 建了索引不一定就有效,用实际的SQL检查一下。

    9.建索引的时候,可以根据多个查询场景建多个联合索引(多个查询SQL),mysql会自行选择最优索引来查询(根据上面第4条)。

    PS.因此在编写DAO和SQL代码的时候,要根据情况选择是要灵活还是性能,如果是压力很大的SQL,建议单独领出来,方便以后的SQL优化和索引建立,相反,没有性能压力的情况,SQL则可以选择写的通用点,复用性好点。

    案例:

    一个投票的业务场景中,在查询用户的投票记录中,可以根据投票的活动ID和投票人的ID,2个维度去建立索引,这样的话,在查询的时候,MYSQL会有2个possible_keys可以选择,根据返回的结果选择最适合的key(索引)

    注意事项: 

    当一个表有多条索引可走时,  Mysql  根据查询语句的成本来选择走哪条索引, 联合索引的话, 它往往计算的是第一个字段(最左边那个), 这样往往会走错索引. 如: 
    索引Index_1(Create_Time, Category_ID), Index_2(Category_ID) 

    如果每天的数据都特别多, 而且有很多category, 但具体每个category的记录不会很多.

    当查询SQL条件为select …where create_time ….and category_id=..时, 很可能不走索引Index_1, 而走索引Index_2, 导致查询比较慢.

    解决办法是将索引字段的顺序调换一下,改成Index_1(Create_Time, Category_ID), Index_2(Category_ID,Create_Time) ,注意,索引的顺序和最左边的那个索引,将会引导mysql选择成本最小的那个索引。

    所以根据业务场景,写适合的索引非常重要 

    关于复合索引的起作用的情况:

    mysql 复合索引,联合索引 - flyflying1987 - ly

    上图是建立索引时起作用的示意图,其中,如果出现查询姓名和性别2个条件的情况,则会只使用姓名的索引,然后走where语句,而不会走完(姓名,年龄,性别)整个复合索引,可以用explain语句看索引长度来看

    参考资料:

    http://www.cnblogs.com/sunss/archive/2010/09/14/1826112.html

    http://www.cnblogs.com/krisy/archive/2013/07/12/3186258.html

    http://blog.csdn.net/lmh12506/article/details/8879916

  • 相关阅读:
    AI公司的商业模式
    半监督学习(semi-supervised learning)综述
    图神经网络GNN系列一:入门篇
    怎么写论文的总结(conclusion)
    怎么写论文摘要
    多示例学习(multiple instance learning)定义
    2017CVPR-UntrimmedNets for Weakly Supervised Action Recognition and Detection论文笔记
    向上向下取整
    数论
    set的用法
  • 原文地址:https://www.cnblogs.com/xujanus/p/4517636.html
Copyright © 2011-2022 走看看