zoukankan      html  css  js  c++  java
  • MySQL 数据库-索引注意事项

     
     
    索引注意事项
    (1)最左前缀原则
    如果查询的时候,查询条件精确匹配索引的左边连续一列或几列,则可以命中索引。
    (2)避免where 子句中对字段施加函数,如to_date(create_time)>xxxxxx,这样会造成无法命中索引。
    (3)在使用InnoDB 时,使用与业务无关的自增主键作为主键,即使用逻辑主键,而不要使用业务主键。
    (4)合理利用索引覆盖
    覆盖索引(Covering index)指一个查询语句的执行,只需要从辅助索引中就可以得到查询记录,而不需要查询聚集索引中的记录,也可以称之为实现了索引覆盖。
    简单来说,就是查询条件命中了索引,而查询字段也属于索引中的字段。
    当实现了覆盖索引的时候,explain 命令的Extra 会显示 using Index。
    (5)避免冗余索引
    可以查询sys 库的schemal_redundant_indexes 表来查看冗余索引。
    (6)将打算加索引的列设置为 NOT NULL,否则将导致引擎放弃使用索引,而进行全表扫描。
    (7)删除长期未使用的索引
    可以查询sys 库的 schema_unused_indexes 视图来查询从未使用过的索引。
    (8)联表查询,也可以使用索引:
    • 确保 ON 和 USING 中列上有索引。
    • 确保任何的 GROUP BY 和 ORDER BY 中的表达式只涉及一个表中列。
    (9)查询条件的字段应使用正确的数据类型,否则MySQL 会自动做类型转换,导致无法命中索引。
     
    索引的代价:
    1. 索引文件本身要消耗存储空间;
    2. 在被索引的表上,INSERT/DELETE 会变慢;
    3. MySQL在运行是,也要消耗资源维护索引;
  • 相关阅读:
    填坑!!!virtualenv 中 nginx + uwsgi 部署 django
    树的遍历与递归
    Python 函数的参数
    virtualbox安装增强功能时【未能加载虚拟光盘】
    深入理解Python中的生成器
    Genymotion下载慢或者下载失败的解决办法
    Python3 多线程的两种实现方式
    Java 多线程
    关于"裁员与面试"的个人感悟吧
    三、由简单对象组装复杂实例的模式:建造者模式
  • 原文地址:https://www.cnblogs.com/rickie/p/10126340.html
Copyright © 2011-2022 走看看