日食三餐夜眠六尺

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

数据库之索引篇

概述

  • 索引简介
  • 创建索引
  • 删除索引

一、索引简介

  1. 什么是索引?

    • 索引是对数据表中一列或多列的值进行排序的一种结构,可提高特定数据的查询速度。
    • 索引是一个单独的、存储在磁盘上的数据库结构,包含着数据表里所有记录的引用指针。
  2. 索引的优点

    • 通过创建唯一索引,可以保证数据表中每一行数据的唯一性;
    • 加快数据的查询速度,这是创建索引的主要原因;
    • 实现数据的参考完整性,加速表与表之间的连接;
    • 减少分组查询中分组和排序的时间。
  3. 索引的缺点

    • 创建、维护索引要耗费时间,随数据量的增减而增加;
    • 索引占用磁盘空间,索引文件可能比数据文件更快达到最大文件尺寸;
    • 对表中数据进行更新、修改和删除操作的时候,索引也要动态地维护,这会降低数据的维护速度。
  4. 索引的分类

    • 普通索引和唯一索引

      基本索引:允许索引列有重复值和空值。

      唯一索引:索引列的值必须唯一,但允许控制。主键索引属于特殊的唯一索引,列值不允许有空值。

    • 单列索引和组合索引

    ​ 单列索引:一个索引只包含单个列,一个表可以有多个单列索引。

    ​ 组合索引:多个字段组合上创建索引,使用时遵循最左前缀集合。

    • 全文索引:用于全文搜索,FULLTEXT,可重复,允许空值。
    • 空间索引:空间数据类型的字段上建立的索引,非空。
  5. 索引设计原则

    • 索引并非越多越好:占空间、影响INSERT/UPDATE/DELETE等操作;

    • 数据量小的表最好不使用索引,查询时间可能短于遍历索引的时间;

    • 尽可能在不同值多的列上建立索引,这有利于提高查询效率;

    • 唯一性列指定唯一索引;

    • 对频繁进行排序或分组的列(组合)上建立索引。

二、创建索引

  1. 创建表时建立索引(INDEX 或 KEY)

    • 创建普通索引

      CREATE TABLE book
      (
          bookid INT NOT NULL,
          bookname VARCHAR(225) NOT NULL,
          authors VARCHAR(225) NOT NULL,
          info VARCHAR(225) NULL,
          comment VARCHAR(225) NULL,
          year_pabulication YEAR NOT NULL,
          INDEX(year_pabulication)
      );
      -- 可使用EXPLAIN语句查看索引是否正确使用
      
    • 创建唯一索引(UNIQUE INDEX)

      CREATE TABLE t1
      (
          id INT NOT NULL,
          name CHAR(30) NOT NULL,
          UNIQUE INDEX UniqIdx(id)
      );
      -- 在id字段上创建一个名为UniqIdx的唯一索引
      
    • 创建单列索引

      CREATE TABLE t2
      (
          id INT NOT NULL,
          name CHAR(50) NULL,
          INDEX SingleIdx(name(20))
      );
      -- 在id字段上创建一个名为UniqIdx的单列索引,长度为20
      
    • 创建组合索引

      CREATE TABLE t3
      (
          id INT NOT NULL,
          name CHAR(30) NOT NULL,
          age INT NOT NULL,
          info VARCHAR(225),
          INDEX MutiIdx(iid,name,age(100))
      );
      -- 在iid,name,age上创建名为MutiIdx的组合索引
      -- 组合索引使用时遵循“最左前缀”
      
    • 创建全文索引

      CREATE TABLE t4
      (
          id INT NOT NULL,
          name CHAR(30) NOT NULL,
          age INT NOT NULL,
          info VARCHAR(225),
          FULLTEXT INDEX FullTxtIdx(info)
      );
      -- 在info字段上创建名为FullTxtIdx的FULLTEXT索引
      
    • 创建空间索引

      必须在MyISAM类型的表中创建,非空

      CREATE TABLE t5 
      (
          g GEOMETRY NOT NULL,
          SPATIAL INDEX spatIdx(g)
      );
      -- 在g字段上创建名为spatIdx的空间索引
      
  2. 在已有表上建立索引(ALTER TABLE 或 CREATE INDEX)

    • 使用ALTER TABLE创建索引

      -- 基本语法
      ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (col_name[length],...) [ASC|DESC]
      
    • 使用CREATE INDEX创建索引

      CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name (col_name[length],...) [ASC|DESC]
      

三、删除索引

  1. 使用ALTER TABLE删除索引

    ALTER TABLE tabe_name DROP INDEX index_name;
    -- 注:添加AUTO-INCREMENT约束字段的唯一索引不能被删除
    
  2. 使用DROP INDEX删除索引

    DROP INDEX index_name ON table_name;
    

posted on   chenxiaoyuan  阅读(490)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示