当前位置: 首页 > news >正文

数据库索引创建与使用详细笔记

1. 索引简介

索引是数据库中的一种数据结构,它通过在特定字段上建立索引来加速查询操作。通过索引,我们可以在查询时不必扫描整个表,而是直接定位到数据的位置,从而提高查询效率。


2. 索引类型及数据类型

在不同的数据类型上,可以创建不同的索引。以下是常见数据类型和索引创建的详细说明,并以表格形式展示。

2.1 字符串类型(VARCHAR

VARCHAR 类型用于存储变长的字符串数据,适用于存储名字、描述等信息。VARCHAR 字段通常使用 B-Tree 索引,可以提高对这些字段的查询性能。

字段类型索引类型索引用途创建索引语句示例查询
VARCHARB-Tree等值、范围、LIKE 查询CREATE INDEX idx_name ON users (name);SELECT * FROM users WHERE name = 'Alice';
SELECT * FROM users WHERE name LIKE 'A%';
前缀索引CREATE INDEX idx_name_prefix ON users (name(10));SELECT * FROM users WHERE name LIKE 'A%';
前缀索引示例:
CREATE INDEX idx_name_prefix ON users (name(10));
  • 在上述例子中,name(10) 表示只对 name 字段的前 10 个字符进行索引。

2.2 整数类型(INTBIGINTSMALLINT

整数类型字段通常用于存储 ID、数量、年龄等数据,适合进行等值查询或范围查询。

字段类型索引类型索引用途创建索引语句示例查询
INTB-Tree等值、范围查询CREATE INDEX idx_user_id ON users (user_id);SELECT * FROM users WHERE user_id = 1001;
BIGINTB-Tree等值、范围查询CREATE INDEX idx_order_id ON orders (order_id);SELECT * FROM orders WHERE order_id > 5000;
范围查询示例:
SELECT * FROM users WHERE user_id BETWEEN 1000 AND 2000;

2.3 浮动类型(FLOATDOUBLE

浮动类型字段用于存储具有小数点的数值数据,如价格、评分等字段,常用于范围查询。

字段类型索引类型索引用途创建索引语句示例查询
FLOATB-Tree等值、范围查询CREATE INDEX idx_product_price ON products (price);SELECT * FROM products WHERE price BETWEEN 10.00 AND 50.00;
DOUBLEB-Tree等值、范围查询CREATE INDEX idx_product_rating ON products (rating);SELECT * FROM products WHERE rating > 4.5;
范围查询示例:
SELECT * FROM products WHERE price BETWEEN 10.00 AND 50.00;

2.4 日期/时间类型(DATEDATETIMETIMESTAMP

日期/时间类型字段用于存储时间数据,适用于创建时间、事件发生时间等。常用于进行范围查询和排序。

字段类型索引类型索引用途创建索引语句示例查询
DATEB-Tree等值、范围查询CREATE INDEX idx_order_date ON orders (order_date);SELECT * FROM orders WHERE order_date = '2025-07-12';
DATETIMEB-Tree等值、范围查询CREATE INDEX idx_event_time ON events (event_time);SELECT * FROM events WHERE event_time BETWEEN '2025-01-01' AND '2025-12-31';
TIMESTAMPB-Tree等值、范围查询CREATE INDEX idx_user_login ON users (last_login);SELECT * FROM users WHERE last_login > '2025-01-01';
范围查询示例:
SELECT * FROM orders WHERE order_date BETWEEN '2025-01-01' AND '2025-12-31';

2.5 布尔类型(BOOLEAN

布尔类型字段通常用于存储状态值(如开启/关闭、激活/禁用等),虽然布尔字段的取值有限,但仍可以创建索引。由于布尔字段的取值范围较小,索引的性能提升有限。

字段类型索引类型索引用途创建索引语句示例查询
BOOLEANB-Tree等值查询CREATE INDEX idx_user_active ON users (is_active);SELECT * FROM users WHERE is_active = TRUE;
布尔类型查询示例:
SELECT * FROM users WHERE is_active = TRUE;

2.6 枚举类型(ENUM

ENUM 类型用于存储预定义的字符串值,常见于性别、状态等字段。ENUM 字段也可以使用 B-Tree 索引,尤其适合在多选项的场景中查询。

字段类型索引类型索引用途创建索引语句示例查询
ENUMB-Tree等值、范围查询CREATE INDEX idx_user_gender ON users (gender);SELECT * FROM users WHERE gender = 'Male';
枚举类型查询示例:
SELECT * FROM users WHERE gender = 'Male';

2.7 二进制类型(BLOB

BLOB 类型用于存储二进制数据(如文件、图片等)。由于二进制数据通常较大且不适用于常规查询,因此通常不会为 BLOB 字段创建索引。

字段类型索引类型索引用途创建索引语句示例查询
BLOB无索引不适合索引

3. 索引优化与注意事项

  1. 选择性高的字段:选择性高的字段(即字段中唯一值较多)更适合创建索引。索引能提高查询效率,但对于选择性低的字段(例如性别、状态等),创建索引效果不明显。

  2. 索引的开销:虽然索引能够加速查询,但在插入、删除、更新数据时,索引会带来额外的维护开销。因此,建议只为频繁查询的字段创建索引。

  3. 复合索引:对于多个条件查询的场景,可以创建复合索引。例如,对于 nameemail 都需要查询的情况,可以创建一个复合索引。

CREATE INDEX idx_users_name_email ON users (name, email);
  1. 覆盖索引:当查询的字段全部包含在复合索引中时,数据库可以仅通过索引就返回查询结果,这种索引称为覆盖索引,可以大大提高查询效率。

  2. 前缀索引:对于 VARCHAR 类型的大字段,使用前缀索引(如只索引前 10 个字符)可以减少索引的存储空间并提高性能。

  3. 删除不再使用的索引:删除不再需要的索引,避免占用额外的磁盘空间和提高写操作的性能。

DROP INDEX idx_users_email;

4. 结语

索引是数据库性能优化的重要手段,合理使用索引可以显著提高查询效率。在不同数据类型的字段上创建索引,并根据实际需求优化索引策略,能够使数据库在查询时更加高效。理解和使用好索引是数据库管理的基础技能之一。


希望这个详细的笔记和表格能帮助你更清晰地理解不同数据类型的索引使用!
好的,下面是对不同数据类型字段创建索引的详细说明,并通过表格形式展示相关信息。这样能帮助你更清晰地理解每种数据类型索引的创建和使用。


数据库索引创建与使用详细笔记

1. 索引简介

索引是数据库中的一种数据结构,它通过在特定字段上建立索引来加速查询操作。通过索引,我们可以在查询时不必扫描整个表,而是直接定位到数据的位置,从而提高查询效率。


2. 索引类型及数据类型

在不同的数据类型上,可以创建不同的索引。以下是常见数据类型和索引创建的详细说明,并以表格形式展示。

2.1 字符串类型(VARCHAR

VARCHAR 类型用于存储变长的字符串数据,适用于存储名字、描述等信息。VARCHAR 字段通常使用 B-Tree 索引,可以提高对这些字段的查询性能。

字段类型索引类型索引用途创建索引语句示例查询
VARCHARB-Tree等值、范围、LIKE 查询CREATE INDEX idx_name ON users (name);SELECT * FROM users WHERE name = 'Alice';
SELECT * FROM users WHERE name LIKE 'A%';
前缀索引CREATE INDEX idx_name_prefix ON users (name(10));SELECT * FROM users WHERE name LIKE 'A%';
前缀索引示例:
CREATE INDEX idx_name_prefix ON users (name(10));
  • 在上述例子中,name(10) 表示只对 name 字段的前 10 个字符进行索引。

2.2 整数类型(INTBIGINTSMALLINT

整数类型字段通常用于存储 ID、数量、年龄等数据,适合进行等值查询或范围查询。

字段类型索引类型索引用途创建索引语句示例查询
INTB-Tree等值、范围查询CREATE INDEX idx_user_id ON users (user_id);SELECT * FROM users WHERE user_id = 1001;
BIGINTB-Tree等值、范围查询CREATE INDEX idx_order_id ON orders (order_id);SELECT * FROM orders WHERE order_id > 5000;
范围查询示例:
SELECT * FROM users WHERE user_id BETWEEN 1000 AND 2000;

2.3 浮动类型(FLOATDOUBLE

浮动类型字段用于存储具有小数点的数值数据,如价格、评分等字段,常用于范围查询。

字段类型索引类型索引用途创建索引语句示例查询
FLOATB-Tree等值、范围查询CREATE INDEX idx_product_price ON products (price);SELECT * FROM products WHERE price BETWEEN 10.00 AND 50.00;
DOUBLEB-Tree等值、范围查询CREATE INDEX idx_product_rating ON products (rating);SELECT * FROM products WHERE rating > 4.5;
范围查询示例:
SELECT * FROM products WHERE price BETWEEN 10.00 AND 50.00;

2.4 日期/时间类型(DATEDATETIMETIMESTAMP

日期/时间类型字段用于存储时间数据,适用于创建时间、事件发生时间等。常用于进行范围查询和排序。

字段类型索引类型索引用途创建索引语句示例查询
DATEB-Tree等值、范围查询CREATE INDEX idx_order_date ON orders (order_date);SELECT * FROM orders WHERE order_date = '2025-07-12';
DATETIMEB-Tree等值、范围查询CREATE INDEX idx_event_time ON events (event_time);SELECT * FROM events WHERE event_time BETWEEN '2025-01-01' AND '2025-12-31';
TIMESTAMPB-Tree等值、范围查询CREATE INDEX idx_user_login ON users (last_login);SELECT * FROM users WHERE last_login > '2025-01-01';
范围查询示例:
SELECT * FROM orders WHERE order_date BETWEEN '2025-01-01' AND '2025-12-31';

2.5 布尔类型(BOOLEAN

布尔类型字段通常用于存储状态值(如开启/关闭、激活/禁用等),虽然布尔字段的取值有限,但仍可以创建索引。由于布尔字段的取值范围较小,索引的性能提升有限。

字段类型索引类型索引用途创建索引语句示例查询
BOOLEANB-Tree等值查询CREATE INDEX idx_user_active ON users (is_active);SELECT * FROM users WHERE is_active = TRUE;
布尔类型查询示例:
SELECT * FROM users WHERE is_active = TRUE;

2.6 枚举类型(ENUM

ENUM 类型用于存储预定义的字符串值,常见于性别、状态等字段。ENUM 字段也可以使用 B-Tree 索引,尤其适合在多选项的场景中查询。

字段类型索引类型索引用途创建索引语句示例查询
ENUMB-Tree等值、范围查询CREATE INDEX idx_user_gender ON users (gender);SELECT * FROM users WHERE gender = 'Male';
枚举类型查询示例:
SELECT * FROM users WHERE gender = 'Male';

2.7 二进制类型(BLOB

BLOB 类型用于存储二进制数据(如文件、图片等)。由于二进制数据通常较大且不适用于常规查询,因此通常不会为 BLOB 字段创建索引。

字段类型索引类型索引用途创建索引语句示例查询
BLOB无索引不适合索引

3. 索引优化与注意事项

  1. 选择性高的字段:选择性高的字段(即字段中唯一值较多)更适合创建索引。索引能提高查询效率,但对于选择性低的字段(例如性别、状态等),创建索引效果不明显。

  2. 索引的开销:虽然索引能够加速查询,但在插入、删除、更新数据时,索引会带来额外的维护开销。因此,建议只为频繁查询的字段创建索引。

  3. 复合索引:对于多个条件查询的场景,可以创建复合索引。例如,对于 nameemail 都需要查询的情况,可以创建一个复合索引。

CREATE INDEX idx_users_name_email ON users (name, email);
  1. 覆盖索引:当查询的字段全部包含在复合索引中时,数据库可以仅通过索引就返回查询结果,这种索引称为覆盖索引,可以大大提高查询效率。

  2. 前缀索引:对于 VARCHAR 类型的大字段,使用前缀索引(如只索引前 10 个字符)可以减少索引的存储空间并提高性能。

  3. 删除不再使用的索引:删除不再需要的索引,避免占用额外的磁盘空间和提高写操作的性能。

DROP INDEX idx_users_email;

4. 结语

索引是数据库性能优化的重要手段,合理使用索引可以显著提高查询效率。在不同数据类型的字段上创建索引,并根据实际需求优化索引策略,能够使数据库在查询时更加高效。理解和使用好索引是数据库管理的基础技能之一。

http://www.dtcms.com/a/276410.html

相关文章:

  • Linux的NetworkManager的nmcli配置网桥(bridge) 笔记250712
  • 【6.1.1 漫画分库分表】
  • 挖矿病毒判断与处理 - 入门
  • 26-计组-寻址方式
  • 暑假Python基础整理 -- 函数篇
  • 【6.1.2 漫画分布式事务技术选型】
  • 常用 pkill 命令速查表
  • CentOS 系统紧急恢复:从 lib64 目录崩溃到救援实战
  • vue3 canvas 选择器 Canvas 增加页面性能
  • 用FunctionCall实现文件解析(三):ChatOpenAI单例工厂
  • lnmp环境搭建
  • 使用Pycharm集成开发工具远程调试部署在虚拟机上的flask项目:超级详细的完整指南
  • springboot AOP面向切面编程
  • SpringAI实现聊天记录保存到MySQL
  • 连接池的核心接口和常用属性
  • ReentrantLock 源码解析与 AQS 扩展
  • 首次让机器人具备类人的「主动感知」能力
  • 淘宝商品评论API接口操作详解
  • oc分类和swift扩展有哪些区别
  • 火山引擎:字节跳动的技术赋能初解
  • AI智能体 | 使用Coze制作一键生成单词洗脑循环视频,一天批量生成100条视频不是梦!(附保姆级教程)
  • NW728NW733美光固态闪存NW745NW746
  • HashMap的原理
  • 技术面试问题总结二
  • 多模态大模型》多模态基础模型》多模态对齐、融合和表示
  • 关于数字签名
  • xml映射文件的方式操作mybatis
  • 集合类
  • 【2024CSP-J初赛】阅读程序(1)试题详解
  • python-while循环