码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SQL中的索引


    目录

    一、类型

    二、优点

    三、缺点

    四、索引的应用

    五、使用注意事项

    六、索引创建

     1. 创建索引的基本语法

     2. 选择合适的列

     3. 复合索引

    七、索引失效

     1. 查询条件不符合索引

     2. 数据类型不匹配

     3. 使用了NULL值

     4. 大数据量时的复杂查询

     5. ORDER BY和GROUP BY


    数据库的索引是一个数据结构,旨在提高数据库检索数据的速度。索引通过在数据库表中维护一个有序的数据结构,从而加快查询操作的效率。以下是关于数据库索引的一些关键点:

    一、类型

    (1)单列索引:仅涉及表的单一列。

    (2)复合索引:涉及多个列的索引。

    (3)唯一索引:确保索引的列中的所有值都是唯一的。

    (4)全文索引:用于快速文本查找,通常在处理大量字符串数据时使用。

    二、优点

    (1)加速数据检索,特别是在大型数据集中的查询。

    (2)提高排序和过滤操作的性能。

    三、缺点

    (1)增加存储开销。

    (2) 插入、删除和更新操作时,可能导致性能下降,因为需要维护索引。

    四、索引的应用

    (1)查询优化:通过创建索引,可以使得数据库优化器选择更高效的查询计划。
    (2)提高排序性能:通过适当的索引,排序操作的效率可以显著提高。

    五、使用注意事项

    (1)不应在每一列上创建索引,选择性地在查询频繁的列上创建索引。

    (2)定期监控和维护索引,以确保其性能最佳。

    六、索引创建

    创建索引可以提高查询效率,但需要正确选择适合的列和索引类型。以下是一些创建索引的基本步骤和注意事项:

     1. 创建索引的基本语法

    CREATE INDEX index_name ON table_name (column_name);

     2. 选择合适的列

    在选择索引列时,应考虑:

    (1)高选择性:索引列的值应该有足够的唯一性,以提高查询效率。例如,使用身份证号码、电子邮件等高选择性字段作为索引优于性别、地区等低选择性字段。

    (2)查询频率:经常出现在 `WHERE`、`JOIN`、`ORDER BY` 或 `GROUP BY` 子句中的列,应该考虑创建索引。

    (3)选择正确的索引类型

            根据数据的性质和查询的特点选择适合的索引类型:

             1)B树索引:适合大多数查询。

             2)全文索引:适合对文本内容进行复杂查询。

    3. 复合索引

    如果查询中涉及多个列,可以考虑创建复合索引,如:

    CREATE INDEX index_name ON table_name (column1, column2);

    七、索引失效

    虽然索引可以显著提升数据库的查询性能,但在某些情况下,索引可能会失效,导致查询优化器放弃使用索引而采用全表扫描,影响性能。以下是一些常见的导致索引失效的情况:

     1. 查询条件不符合索引

    (1)使用了不等式(!=)或 LIKE '%text%,会导致索引失效。

    (2)对索引字段进行了函数操作,例如 :WHERE UPPER(column_name) = value。

     2. 数据类型不匹配

    在查询时,如果与索引列的数据类型不一致,可能导致索引失效。例如,整数字段用字符串类型查询。

    3. 使用了NULL值

     某些数据库系统在处理 NULL 值时可能导致索引失效。

    4. 大数据量时的复杂查询

    如果查询返回的数据量超过一定比例,数据库优化器可能选择全表扫描而非使用索引。

     5. ORDER BY和GROUP BY

    在某些情况下,ORDER BY 和 GROUP BY 的列与索引不匹配,可能导致索引失效。

  • 相关阅读:
    有了Composition API后,有些场景或许你不需要pinia了
    【linux】[OOM]now anon-rss:0kB, file-rss:0kB, shmem-rss:280kB
    BUUCTF Misc 被劫持的神秘礼物 & 刷新过的图片 & [BJDCTF2020]认真你就输了 & [BJDCTF2020]藏藏藏
    简析新能源汽车充电桩设计与应用
    【动态规划】583. 两个字符串的删除操作、72. 编辑距离
    SQL注入类型(详细讲解)
    Spring-bean实例化三种方式
    基于ANSYS Twin Builder连杆结构数字孪生体建模关键技术及应用
    SpringCloud篇
    GO 比较两个对象是否相同
  • 原文地址:https://blog.csdn.net/m0_65347933/article/details/140963863
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号