SQL - 索引

  • 索引本质上是数据库引擎用来快速查找数据的数据结构,可以显著提高查询的性能,为了加快运行较慢的查询。

  • 创建索引

    • 默认索引

      • create index 索引名 on 表名 (列名);
      • 通过对列名进行创建索引,在查询的时候,数据库就能通过索引找到匹配的那些行,适用于支持高效的范围查询。
      sql 复制代码
      -- 默认索引
      create index idx_points on customers (points);
      select customer_id
      from customers
      where points>1000;
    • 前缀索引

      • create index idx_last_name on customers (last_name(5));
      • 对于长字符串列,建议使用前缀索引来节省存储空间和提高查询效率。前缀索引只索引字符串的前几个字符。
      sql 复制代码
      --前缀索引
      create index idx_last_name on customers (last_name(5));
      select customer_id
      from customers
      where last_name like 'boa%';
    • 全文索引

      • create fulltext index idx_title_body on posts(title,body);
      • 全文索引可以在应用程序里打造快速强大的搜索引擎,适用于需要高效文本搜索,如文章,博客等。
      sql 复制代码
      -- 全文索引
      create fulltext index idx_title_body on posts(title,body);
      select *,match(title,body) against ('react redux')
      from posts
      -- where match (全文索引的列名(所有)) against(关键词)
      
      -- where match(title,body) against ('react redux')	
      -- 表示包含 'react' 或 'redux' 的记录
      
      where match(title,body) against('react -redux +form' in boolean mode) 
      -- 表示包含 'react' ,不包含 'redux',必须包含'form' 的记录
    • 复合索引

      • create index idx_state_points on customers (state,points);
      • 复合索引也叫组合索引,就是对多个列建立一个索引,遵循最左前缀原则,适用于需要在多个列进行查询的场景,显著提高查询效率。
      sql 复制代码
      -- 复合索引
      create index idx_state_points on customers (state,points);
      explain select customer_id
      from customers
      where state='ca' and points>1000;
  • 删除索引

    • drop index idx_state on customers;
  • 使用索引排序

    • 使用索引对数据进行排序,当你在添加索引时,MySQL会获取该列中的所有值,对其排序,并将它们存储在索引中。
  • 覆盖索引

    • 一个包含所有满足查询需要的数据的索引,数据库可以直接从索引中获取数据,避免了回表操作,显著提高查询性能。
  • 维护索引

    • 索引可以极大地提高查询的性能,但要注意在创建新索引之前,要先查看现有索引,否则容易产生"重复索引"和"多余索引"。
    • "重复索引",指同一组列上且顺序一致的索引,对于该索引应删除。
    • "多于索引",指多个索引的前缀列相同,或复合索引中包含了主键的索引,对于该索引应合并。
相关推荐
做梦敲代码1 小时前
达梦数据库-读写分离集群部署
数据库·达梦数据库
小蜗牛慢慢爬行1 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger1 小时前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
微服务 spring cloud2 小时前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡2 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷2 小时前
Redis
数据库·redis·缓存
仰望大佬0073 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
学不透java不改名3 小时前
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
数据库
一只路过的猫咪3 小时前
thinkphp6使用MongoDB多个数据,聚合查询的坑
数据库·mongodb