视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL管理与优化(7)_MySQL
2020-11-09 19:28:03 责编:小采
文档


索引的设计与使用

  • 所有MySQL列类型都可以被索引,使用索引是提高SELECT性能的最佳途径。
  • 索引是针对整列的,不支持局部索引。
  • 范例:
  • -- 表mysql> select * from city;+----+----------+| id | city |+----+----------+| 1 | ChengDu || 2 | NeiJiang || 3 | HangZhou |+----+----------+-- 创建10个字节的前缀索引mysql> create index cityname on city (city(10));Query OK, 0 rows affected (0.21 sec)Records: 0 Duplicates: 0 Warnings: 0-- 查询mysql> explain select * from city where city = 'ChengDu'/G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: city type: refpossible_keys: cityname key: cityname key_len: 33 ref: const rows: 1 Extra: Using where1 row in set (0.04 sec)-- 删除索引mysql> drop index cityname on city;Query OK, 0 rows affected (0.48 sec)Records: 0 Duplicates: 0 Warnings: 0

    设计索引的原则

  • 搜索的索引列,不一定是SELECT出的列。最适合索引的列应该是WHERE子句中的列或连接子句中的列,而不是SELECT选择列中的列。
  • 使用唯一索引。索引列的基数越大,索引的效果越好。比如出生日期这种列的值就比较多,而性别这种列的值就只有男女。
  • 使用短索引。如果对字符串进行索引,就应该指定一个前缀长度。
  • 利用最左前缀。创建一个n列索引时,实际创建了MySQL可利用的n个索引。多列索引可起几个索引的作用,因为可以利用索引中最左边的列集来匹配行。
  • 不要过度索引。索引会占用磁盘空间,且会降低写操作的性能。
  • 对于InnoDB存储引擎的表,记录默认会按照一定的顺序保存。有主键,则按主键顺序保存。没有主键,但有唯一索引,就按唯一索引的顺序保存。既没有主键,也没有唯一索引,表中会自动生成一个内部列,并按照这个列的顺序保存。按照主键或内部列进行访问时最快的, 所以InnoDB的表,尽量使用自己的主键。InnoDB表的普通索引都会保存主键的键值,索引主键尽可能选择短的数据类型。
  • BTREE索引与HASH索引

  • MEMORY存储引擎的表可以选择使用BTREE索引或HASH索引。
  • HASH索引需要注意的地方:
  • 1. 只用于使用=或<=>操作符的等式比较。

    2. 优化器不能使用HASH索引来加速ORDER BY操作。

    3. MySQL不能确定在两个值之间大约有多少行。如果将MyISAM的表改为HASH索引的MEMORY表,会 影响一些查询的执行效率。

    4. 只能使用整个关键字来搜索一行。

  • 对于BTREE索引,当使用>,<,>=,<=,BETWEEN,!=或者<>,或者LIKE 'pattern' ('pattern'不以通配符开始)操作符时,都可以使用相关列上的索引。
  • 具体索引相关的细节可参考:

    http://dev.mysql.com/doc/refman/5.7/en/optimization-indexes.html

    不吝指正。

    下载本文
    显示全文
    专题