• MySQL索引优化策略


    单列索引:一个索引只包含一个列。
    复合索引:一个索引包含两个或更多的列。
    覆盖索引:当所有要检索的列都包含在索引中时,查询可以只利用索引来完成,而无需额外访问数据表。

    优化策略:

    1. 选择正确的索引列:
       通常,应在搜索条件(WHERE子句)、连接条件(JOIN 子句)以及需要排序的字段(ORDER BY子句)上创建索引。

    2. 避免过度索引:
       每一个新索引都会增加插入、更新、删除操作的开销,因为索引也需要进行维护。
       定期审查索引,并删除冗余或不再使用的索引。

    3. 使用复合索引:
       在查询中经常组合使用的多个列上创建复合索引。
       注意复合索引的列顺序,尤其是当某些列只用于过滤,而其他列用于排序或连接时。

    4. 使用覆盖索引:
       试图设计查询和索引,使得查询可以只使用索引,避免访问实际的数据行。
       
    5. 避免在索引列上使用函数或操作:
       使用函数,如 UPPER(column),会使索引失效,因为它修改了列的原始值。

    6. 注意数据的选择性:
       数据的选择性是唯一值与总记录数之间的比例。
       高选择性的列(即包含许多唯一值的列)是创建索引的好候选者。

    7. 考虑存储引擎的特性:
       如,InnoDB 存储引擎在主键索引上存储数据,所以选择合适的主键非常关键。

    代码示例:

    1.单列索引:
       如果经常基于 last_name 查询,那么这是一个合适的索引
       CREATE INDEX idx_lastname ON employees(last_name);

    2. 复合索引:
       如果经常同时基于 last_name 和 first_name 查询
       CREATE INDEX idx_fullname ON employees(last_name, first_name);

    3. 覆盖索引的使用:
       假设我们对 employees 表的 last_name 和 first_name 有一个复合索引
       下面的查询只使用索引
       SELECT last_name, first_name FROM employees WHERE last_name = 'Smith';

    4. 避免在索引列上使用函数:
       不良的查询,它在索引列上使用了函数
       SELECT * FROM employees WHERE UPPER(last_name) = 'SMITH';

       优化后的查询
       SELECT * FROM employees WHERE last_name = 'Smith';

    正确的索引策略需要考虑查询模式、数据分布和数据库的特性。它通常需要多次迭代和细调。利用数据库的查询执行计划工具(如 MySQL 的 EXPLAIN 命令)优化索引策略。

  • 相关阅读:
    十年沉浮,Web2 到 Web3 的转变之路
    Qt的容器
    蓝桥杯(砝码称重,C++)
    Windows通过cmd运行快速启动应用
    C++类与对象深度解析(一):从抽象到实践的全面入门指南
    【lc】678-有效括号模式
    js中将字符串转换为正则
    阿里云通义千问向全社会开放,近期将开源更大参数规模大模型
    C语言实现——简易通讯录
    JVM(10)之垃圾收集器PartNew&CMS以及三色标记算法详解
  • 原文地址:https://blog.csdn.net/forgetmiss/article/details/133318630