没有合适的资源?快使用搜索试试~ 我知道了~
SQL中的CREATE INDEX 语句.pdf
需积分: 1 0 下载量 158 浏览量
2024-07-26
09:14:38
上传
评论
收藏 525KB PDF 举报
温馨提示
SQL中的CREATE INDEX 语句
资源推荐
资源详情
资源评论





























SQL 中的 CREATE INDEX 语句
CREATE INDEX 语句在数据库管理系统(如 MySQL, PostgreSQL, SQL Server, Oracle 等)中用于在
表的一个或多个列上创建索引。索引是帮助数据库管理系统快速检索表中数据的结构。通过索引,数
据库可以快速定位到数据的物理位置,从而加快查询速度。不过,索引也会占用额外的存储空间,并
且在插入、删除和更新数据时可能会稍微降低性能,因为数据库需要同时更新索引。
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
[index_type]
ON tbl_name (key_part,...)
[index_option]
[algorithm_option | lock_option] ...
key_part: {col_name [(length)] | (expr)} [ASC | DESC]
index_option: {
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT 'string'
| {VISIBLE | INVISIBLE}
| ENGINE_ATTRIBUTE [=] 'string'
| SECONDARY_ENGINE_ATTRIBUTE [=] 'string'
}
index_type:
USING {BTREE | HASH}
algorithm_option:
ALGORITHM [=] {DEFAULT | INPLACE | COPY}
lock_option:
LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}
通常,在使用 create table 创建表本身时,您会在表上创建所有索引。此指南对于 InnoDB 表尤为重

要,因为主键决定了数据文件中行的物理布局。CREATE INDEX 允许您向现有表添加索引。
CREATE INDEX 被映射到 ALTER TABLE 语句以创建索引。CREATE INDEX 不能用于创建主键;请改用
ALTER TABLE。
InnoDB 支持虚拟列上的辅助索引。
启用 innodb_stats_persistent 设置后,在 innodb 表上创建索引后,运行该表的 ANALYZE TABLE 语句。
从 MySQL 8.0.17 开始,key_part 规范的 expr 可以采用(CAST json_enxpression AS 类型 ARRAY)的
形式,在 json 列上创建多值索引。
格式为(key_part1,key_part2,…)的索引规范创建了一个包含多个关键部分的索引。索引键值是
通过连接给定关键部分的值而形成的。例如(col1,col2,col3)指定了一个多列索引,其索引键由
col1、col2 和 col3 中的值组成。
key_part 规范可以以 ASC 或 DESC 结尾,以指定索引值是按升序还是降序存储。如果没有给出顺序说
明符,默认值为升序。ASC 和 DESC 不允许用于 HASH 索引。ASC 和 DESC 也不支持多值索引。从
MySQL 8.0.12 开始,ASC 和 DESC 不允许用于空间索引。
以下部分描述了 CREATE INDEX 语句的不同方面:
列前缀关键部分
对于字符串列,可以创建仅使用列值前导部分的索引,使用 col_name(length)语法指定索引前缀
长度:
可以为 CHAR、VARCHAR、BINARY 和 VARBINARY 键部分指定前缀。
必须为 BLOB 和 TEXT 键部分指定前缀。此外,BLOB 和 TEXT 列只能为 InnoDB、MyISAM 和
BLACKHOLE 表建立索引。
前缀限制以字节为单位。但是,CREATE TABLE、ALTER TABLE 和 CREATE index 语句中索引规范
的前缀长度被解释为非二进制字符串类型(CHAR、VARCHAR、TEXT)的字符数和二进制字符串
类型的字节数(binary、VARBINARY 和 BLOB)。在为使用多字节字符集的非二进制字符串列指
定前缀长度时,请考虑这一点。

前缀支持和前缀长度(如果支持)取决于存储引擎。例如,对于使用 REDUNDANT 或 COMPACT 行
格式的 InnoDB 表,前缀的长度可达 767 字节。对于使用 DYNAMIC 或 COMPRESSED 行格式的 InnoDB
表,前缀长度限制为 3072 字节。对于 MyISAM 表,前缀长度限制为 1000 字节。NDB 存储引擎不支
持前缀。
如果指定的索引前缀超过了最大列数据类型大小,CREATE index 将按如下方式处理索引:
对于非唯一索引,要么会发生错误(如果启用了严格 SQL 模式),要么会将索引长度缩短到最大
列数据类型大小范围内,并产生警告(如果未启用严格的 SQL 模式)。
对于唯一索引,无论 SQL 模式如何,都会发生错误,因为缩短索引长度可能会插入不符合指定唯
一性要求的非唯一条目。
这里显示的语句使用 name 列的前 10 个字符创建索引(假设 name 具有非二进制字符串类型):
CREATE INDEX part_of_name ON customer (name(10));
如果列中的名称通常在前 10 个字符中不同,则使用此索引执行的查找不应比使用从整个名称列创建
的索引慢得多。此外,为索引使用列前缀可以使索引文件小得多,这可以节省大量磁盘空间,还可以
加快 INSERT 操作。
功能关键部件
“普通”索引对列值或列值的前缀进行索引。例如,在下表中,给定 t1 行的索引条目包括完整的 col1
值和由其前 10 个字符组成的 col2 值的前缀:
CREATE TABLE t1 (
col1 VARCHAR(10),
col2 VARCHAR(20),
INDEX (col1, col2(10))
);
MySQL 8.0.13 及更高版本支持索引表达式值而不是列或列前缀值的功能关键部分。使用功能关键部
分可以对不直接存储在表中的值进行索引。示例:
CREATE TABLE t1 (col1 INT, col2 INT, INDEX func_index ((ABS(col1))));
CREATE INDEX idx1 ON t1 ((col1 + col2));
CREATE INDEX idx2 ON t1 ((col1 + col2), (col1 - col2), col1);

ALTER TABLE t1 ADD INDEX ((col1 * 40) DESC);
具有多个关键部分的索引可以混合非功能和功能关键部分。
功能关键部件支持 ASC 和 DESC。
功能关键部件必须遵守以下规则。如果关键部件定义包含不允许的构造,则会发生错误。
在索引定义中,将表达式括在括号内,以将其与列或列前缀区分开来。例如,这是允许的;表达
式被括在括号内:
INDEX ((col1 + col2), (col3 - col4))
这会产生错误;表达式未括在括号内:
INDEX (col1 + col2, col3 - col4)
功能键部分不能仅由列名组成。例如,这是不允许的:
INDEX ((col1), (col2))
相反,将关键部分写为非功能关键部分,不带括号:
INDEX (col1, col2)
函数键部分表达式不能引用列前缀。
外键规范中不允许使用功能关键部件。
对于 CREATE TABLE ... LIKE,目标表保留了原始表中的功能关键部分。
函数索引被实现为隐藏的虚拟生成列,这具有以下含义:
(1) 每个功能关键部分都不受表列总数的限制;
(2) 功能关键部分继承了适用于生成列的所有限制。示例:
功能关键部分只允许生成列中允许的功能。
不允许使用子查询、参数、变量、存储函数和可加载函数。
(3) 虚拟生成的列本身不需要存储。索引本身和其他索引一样占用存储空间。
UNIQUE 支持包含功能关键部分的索引。但是,主键不能包括功能键部分。主键要求存储生成的列,
但功能键部分被实现为虚拟生成列,而不是存储生成列。
SPATIAL 和 FULLTEXT 索引不能有功能键部分。
如果表不包含主键,InnoDB 会自动将第一个 UNIQUE NOT NULL 索引提升为主键。具有功能键部分
的 UNIQUE not NULL 索引不支持此操作。
如果存在重复索引,非功能索引会发出警告。包含功能关键部分的索引没有此功能。
要删除功能键部分引用的列,必须先删除索引。否则,将出现错误。
剩余19页未读,继续阅读
资源评论


icysmile131
- 粉丝: 4704
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 【Python爬虫】从请求到数据存储全流程指南:涵盖网络请求、HTML解析与数据处理基础教程
- 由百度文心大模型驱动的 AirSim 无人机系统
- Selenium测试版浏览器和驱动
- 基于OpenCV的工业机器视觉软件开发.pdf
- 基于百度文心大模型驱动airsim无人机
- Python在图书情报学的应用与扩散研究.pdf
- 基于ELF文件恢复的Linux内存取证技术研究.caj
- 基于MATLAB地下水溶质运移预测模型的构建.pdf### 文章总结
- 管理系统源码-Python编程-基于SQLite的用户管理系统实现:涵盖CRUD功能的数据库操作入门教程
- 用于调用生成式大语言模型的 API 服务器系统
- 全国小区数据(包含字段:小区名、省份、城市、区域、地址、纬度(百度地图)、经度(百度地图)、纬度(GPS)、经度(GPS)、物业费
- 【大模型 NLP 算法付费干货大礼包】一站式拥有,学习科研工作全无忧!
- SQL Server 2000权威指南:从入门到精通
- 一项基于大模型的App隐私开关探测技术
- python 练习题 ,python 题目
- python 练习题,python 三角形题目
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
