美文网首页
【MySQL】MySQL 有哪些类型的索引?

【MySQL】MySQL 有哪些类型的索引?

作者: 放纵不基 | 来源:发表于2023-04-22 11:31 被阅读0次

MySQL官方对索引的定义是:索引(Index)是帮助MySQL高效获取数据的数据结构。
索引最形象的比喻就是图书的目录。
注意只有在大量数据中查询时索引才显得有意义。

在MySQL中索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。

常见的索引分类如下:

按数据结构分类:B+tree索引、Hash索引、Full-text索引。

按物理存储分类:聚集索引、非聚集索引(也叫二级索引、辅助索引)。

按字段特性分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)。

按字段个数分类:单列索引、联合索引(也叫复合索引、组合索引)。

image.png

MySQL 支持以下几种类型的索引:

  1. 主键索引

假设有一个用户表 users,其中 user_id 是主键,可以使用以下语句创建主键索引:

CREATE TABLE users (
  user_id INT PRIMARY KEY,
  name VARCHAR(50),
  age INT
);

主键索引可以提高按照 user_id 查找用户信息的效率,例如:

SELECT * FROM users WHERE user_id = 123;
  1. 唯一索引

假设有一个订单表 orders,其中 order_number 是唯一索引,可以使用以下语句创建唯一索引:

CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  order_number VARCHAR(50) UNIQUE,
  customer_id INT,
  amount DECIMAL(10, 2)
);

唯一索引可以保证 order_number 的唯一性,例如:

INSERT INTO orders (order_number, customer_id, amount)
VALUES ('202201010001', 123, 100.00);

如果再次插入相同的 order_number,将会报错。

  1. 普通索引

假设有一个商品表 products,其中 category_id 是普通索引,可以使用以下语句创建普通索引:

CREATE TABLE products (
  product_id INT PRIMARY KEY,
  name VARCHAR(50),
  price DECIMAL(10, 2),
  category_id INT,
  INDEX idx_category_id (category_id)
);

普通索引可以提高按照 category_id 查找商品信息的效率,例如:

SELECT * FROM products WHERE category_id = 123;
  1. 全文索引

假设有一个文章表 articles,其中 content 是全文索引,可以使用以下语句创建全文索引:

CREATE TABLE articles (
  article_id INT PRIMARY KEY,
  title VARCHAR(50),
  content TEXT,
  FULLTEXT INDEX idx_content (content)
);

全文索引可以提高按照文章内容搜索文章的效率,例如:

SELECT * FROM articles WHERE MATCH (content) AGAINST ('MySQL');
  1. 组合索引

假设有一个订单表 orders,其中 customer_id 和 order_date 是组合索引,可以使用以下语句创建组合索引:

CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  customer_id INT,
  order_date DATE,
  amount DECIMAL(10, 2),
  INDEX idx_customer_date (customer_id, order_date)
);

组合索引可以提高按照 customer_id 和 order_date 查找订单信息的效率,例如:

SELECT * FROM orders WHERE customer_id = 123 AND order_date BETWEEN '2022-01-01' AND '2022-01-31';
  1. 哈希索引

假设有一个商品表 products,其中 barcode 是哈希索引,可以使用以下语句创建哈希索引:

CREATE TABLE products (
  product_id INT PRIMARY KEY,
  name VARCHAR(50),
  price DECIMAL(10, 2),
  barcode VARCHAR(50),
  INDEX idx_barcode (barcode) USING HASH
);

哈希索引可以提高按照 barcode 查找商品信息的效率,例如:

SELECT * FROM products WHERE barcode = '1234567890';
  1. 空间索引

假设有一个商家表 businesses,其中 location 是空间索引,可以使用以下语句创建空间索引:

CREATE TABLE businesses (
  business_id INT PRIMARY KEY,
  name VARCHAR(50),
  location POINT,
  SPATIAL INDEX idx_location (location)
);

空间索引可以提高按照经纬度查找附近商家的效率,例如:

SELECT * FROM businesses WHERE ST_Distance_Sphere(location, POINT(121.5, 31.3)) < 1000;

参考

MySQL索引有哪些分类,你真的清楚吗?
https://blog.csdn.net/u013635487/article/details/122469255

MySQL 常见索引类型介绍
https://mp.weixin.qq.com/s/rkcpL5ly75pfK5vvKRzo6w

MySQL 10几种索引类型,你都清楚吗?
https://www.51cto.com/article/747604.html

Redis的几种拓展方案,你都清楚吗?
https://www.51cto.com/article/681996.html

相关文章

  • 20、MySQL 索引类型有哪些?

    MySQL 索引类型有哪些? 主键索引 索引列中的值必须是唯一的,不允许有空值。 普通索引 MySQL中基本索引类...

  • MySQL索引及查询优化书目录

    MySQL索引的原理之索引目的 MySQL索引的原理之索引原理 MySQL索引的原理之索引的类型 MySQL索引的...

  • 2020数据库最新面试题常考汇总

    [toc] MySQL索引 1.数据库中有哪些索引类型? 索引的几种类型:唯一索引、主键索引、聚集索引、普通索引、...

  • MySql 数据查询优化

    1. MySQL索引类型: mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。...

  • 索引背后的数据结构和算法原理

    提问:常见索引有哪些? 1、索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数...

  • mysql

    1.mysql索引的类型,主键索引、唯一索引、普通索引、组合索引、全文索引,b-tree索引 2.mysql具体有...

  • Mysql面试题

    文章目录 MySQL 索引使用有哪些注意事项呢?索引哪些情况会失效索引不适合哪些场景 MySQL 遇到过死锁问题吗...

  • 5.2MySQL创建高性能索引考察点

    MySQL索引的基础和类型延伸:MySQL索引的创建原则延伸:MySQL索引的注意事项 索引的基础索引类似于书籍的...

  • MySQL数据库

    索引有哪些,用性别做联合索引有没有效果 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数...

  • Mysql 索引

    Mysql 索引的目的 索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。 Mysql 有哪些索引 普通索引...

网友评论

      本文标题:【MySQL】MySQL 有哪些类型的索引?

      本文链接:https://www.haomeiwen.com/subject/ofssjdtx.html