- 1 MySQL 简介
- MySQL 版本和产品线说明
- MySQL 安装
- 2 MySQL 基础教程
- 2.1 SQL 语法:SELECT/INSERT/UPDATE/DELETE
- 2.2 MySQL 列类型
- 2.3 使用用户变量
- 2.4 MySQL 的日期和时间管理
- 2.5 集合运算
- 3 MySQL 高级教程
- 3.1 触发器
- 3.2 视图
- 3.3 复制 Replication~主从库配置
- 3.4 分区存储
- 本章参考
- 4 MySQL 优化
- 4.1 优化数据库结构
- 4.2 优化 SQL 语句
- 4.3 优化索引
- 4.4 优化数据库服务器 mysql_serverd
- 4.5 修改配置文件 my.cnf/my.ini
- 5 MySQL 管理
- 5.1 MySQL 管理常用命令
- 5.2 MySQL 权限管理
- 5.3 MySQL 备份和恢复
- 5.4 MySQL 数据库安全
- 常见问题 FAQ
- 使用的常见问题
- MySQL 字符集乱码
- MySQL 存储二进制图片
- 参考资料
4.3 优化索引
查看表内索引:主键 PRI、唯一 UNI、索引 MUL
- 如果键是 PRI,则列是主键或多列主键中的列之一。
- 如果键是 UNI,则该列是唯一索引的第一列。(唯一索引允许多个空值,但可以通过检查 Null 字段来判断该列是否允许空。)
- 如果键为 MUL,则该列是非唯一索引的第一列,其中允许在列中多次出现给定值。
mysql> desc tbl_name
mysql> show index from tbl_name;
mysql> show keys from tbl_name;
mysql> CHECK TABLE tal_name
SQL_WHERE 的限制条件只对其中一个索引起作用,因为多值限定时要将比较分散的索引放在前面以增加命中率,减少遍历。如年龄索引比性别索引高效。
- 每张表的主索引应该尽可能短。这使一行的识别容易而有效。
- 只创建你确实需要的索引。
在一些情形下,将一个经常被扫描的表分割为 2 个表是有益的。特别是如果它是一个动态格式的表,并且可能使用一个扫描表时能用来找出相关行的较小静态格式的表。
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON tbl_name (index_col_name,...)
index_col_name:
col_name [(length)] [ASC | DESC]
通常,当使用 CREATE TABLE 创建表时,也同时在表中创建了所有的索引。请参见 13.1.5 节,CREATE TABLE 语法 。CREATE INDEX 允许您向已有的表中添加索引。
格式为(col1, col2,...)的一个列清单创建出一个多列索引。通过串接给定列中的值,确定索引值的格式。
对于 CHAR 和 VARCHAR 列,只用一列的一部分就可创建索引。创建索引时,使用 col_name(length) 语法,对前缀编制索引。前缀包括每列值的前 length 个字符。BLOB 和 TEXT 列也可以编制索引,但是必须给出前缀长度。
此处展示的语句用于创建一个索引,索引使用列名称的前 10 个字符。
CREATE INDEX part_of_name ON customer (name(10));
因为多数名称的前 10 个字符通常不同,所以此索引不会比使用列的全名创建的索引速度慢很多。另外,使用列的一部分创建索引可以使索引文件大大减小,从而节省了大量的磁盘空间,有可能提高 INSERT 操作的速度。
前缀最长为 255 字节。对于 MyISAM 和 InnoDB 表,前缀最长为 1000 字节。注意前缀的限长以字节计,而 CREATE INDEX 语句中的前缀长度指的是字符的数目。对于使用多字节字符集的列,在指定列的前缀长度时,要考虑这一点。
在 MySQL 5.1 中:
- 只有当您正在使用 MyISAM, InnoDB 或 BDB 表类型时,您可以向有 NULL 值的列中添加索引。
- 只有当您正在使用 MyISAM, BDB 或 InnoDB 表类型时,您可以向 BLOB 或 TEXT 列中添加索引。
一个 index_col_name 规约可以以 ASC 或 DESC 为结尾。这些关键词将来可以扩展,用于指定递增或递减索引值存储。目前,这些关键词被分析,但是被忽略;索引值均以递增顺序存储。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论