博客
关于我
如何创建数据库mysql索引,单索引和联合索引如何使用?
阅读量:743 次
发布时间:2019-03-21

本文共 1497 字,大约阅读时间需要 4 分钟。

数据库索引是数据库性能优化的关键,但了解和使用索引也需要谨慎。作为数据库管理员或开发人员,我们需要掌握索引的使用技巧,避免常见的误区。本文将总结一些实践经验,帮助大家更科学地使用索引。

一、数据库索引的创建与使用

数据库索引的类型主要有单索引和联合索引。单索引仅针对一个字段进行 optimization,而联合索引则结合多个字段的信息,提升查询效率。在实际应用中,需要注意以下几点:

  • 索引的选择性

    • 单独的索引或联合索引在查询条件中只能使用其中一个。
    • 如果查询条件同时包含两个索引字段,系统会优先选择数据量较小的索引进行查询。
  • 联合索引的命中原则

    • 联合索引的命中规则是严格按照索引字段的顺序进行的,即从左到右依次检查。
    • 例如,联合索引(A,B,C),在查询时如果仅使用B字段、C字段或A字段,命中率都很低。只有同时满足A、B、C三个字段的条件时,才会命中联合索引。
  • 索引的负载与内存管理

    • 索引会被加载到内存中,但索引量过多可能引起内存压力,这需要合理规划。
  • 二、SQL执行计划的解读

    了解SQL执行计划可以帮助我们分析索引的使用效果。通过EXPLAIN命令,我们可以看到以下关键信息:

    • possible_keys: 可能使用的索引列表。
    • key:实际使用的索引。
    • 如果keyNULL,表示没有使用索引,而是进行了全表扫描,这对于大量数据的表来说很危险。

    注意以下几点:

    • 如果关键查询在执行计划中显示key为空,需要冷静分析查询逻辑,检查是否存在索引设计上的问题。
    • 不要轻信某些预估值,应该通过实际测试来验证执行计划的准确性。

    三、索引失效的常见原因及解决方案

    在实际应用中,索引可能会失效,导致查询性能下降。以下是一些常见的索引失效原因及优化方法:

  • LIKE 操作中的百分比忽略

    • 原因LIKE后缀有%但开头没有%(即形如%M%)时,索引会失效。
    • 优化方法:可以通过函数保存到变量,然后对变量进行 %操作,例如395var charvariable = concat('%', left_porit).
    • 例子SELECT * FROM table WHERE name LIKE '%abc'会失效,但SELECT * FROM table WHERE name LIKE '_abc'仍然可能命中索引。
  • OR 语句的逻辑问题

    • 原因:如果OR运算符的两边字段只有一个是索引,索引将失效,只发生全表扫描。
    • 优化方法:将OR拆分为IN语法。
  • 联合索引的命中问题

    • 原因:当查询条件部分匹配联合索引但未命中,或部分字段未命中。
    • 优化方法:确保查询条件严格遵循联合索引的字段顺序。
  • 数据类型与隐式转换

    • 原因:未加括号导致字段类型隐式转换,影响索引选择。
    • 优化方法:始终加括号明确字段类型。
  • 不等于操作的适用性

    • 原因:使用=, <, >等操作符,索引可能不会被使用。
    • 优化方法:将不等于操作改为范围查询,例如key>0key<0.
  • 函数计算与计算器逻辑

    • 原因:计算字段会导致索引失效。
    • 优化方法:合理设计函数调用位置,尽量避免对索引字段进行计算操作。
  • 全表扫描的优化

    • 原因:索引ipline数低于全表扫描效率时,系统会选择全表扫描。
    • 优化方法:增加索引的iline数,提升查询性能。
  • 推荐阅读

    • 如果需要更深入了解索引的使用,建议参考《数据库索引优化_strip刷题+实战065》,结合具体业务场景进行优化。
    • 如果您的数据库存在频繁超时问题,可参考技术文章《数据库超时排查技术指南》。

    通过这些实践经验和优化措施,我们相信大家能更科学地设计和使用索引,提升数据库整体性能。如有疑问,或许我可以为您解答。

    转载地址:http://bbrgz.baihongyu.com/

    你可能感兴趣的文章
    Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
    查看>>
    NetApp凭借领先的混合云数据与服务把握数字化转型机遇
    查看>>
    NetBeans IDE8.0需要JDK1.7及以上版本
    查看>>
    netcat的端口转发功能的实现
    查看>>
    netfilter应用场景
    查看>>
    netlink2.6.32内核实现源码
    查看>>
    Netpas:不一样的SD-WAN+ 保障网络通讯品质
    查看>>
    NetScaler的常用配置
    查看>>
    netsh advfirewall
    查看>>
    NETSH WINSOCK RESET这条命令的含义和作用?
    查看>>
    Netty WebSocket客户端
    查看>>
    netty 主要组件+黏包半包+rpc框架+源码透析
    查看>>
    Netty 异步任务调度与异步线程池
    查看>>
    Netty中集成Protobuf实现Java对象数据传递
    查看>>
    Netty事件注册机制深入解析
    查看>>
    Netty原理分析及实战(四)-客户端与服务端双向通信
    查看>>
    Netty客户端断线重连实现及问题思考
    查看>>
    Netty工作笔记0006---NIO的Buffer说明
    查看>>
    Netty工作笔记0007---NIO的三大核心组件关系
    查看>>
    Netty工作笔记0011---Channel应用案例2
    查看>>