返回介绍

4.3 优化索引

发布于 2024-10-03 00:33:42 字数 1841 浏览 0 评论 0 收藏 0

查看表内索引:主键 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文