按关键词阅读:
创建索引的原则
索引设计不合理或缺少索引都会对数据库和应用程序的性能造成障碍 , 高效的索引对于获得良好的性能非常重要 。
需要创建索引的情况
- 主外键和唯一约束的字段自动创建索引
- 频繁作为查询条件的字段应该创建索引
- 查询中排序的字段应该创建索引
- 查询中分组或统计的字段应该创建索引
- 表中记录太少不需要创建索引
- 需要频繁增删改的字段不适合创建索引
- where子句中用不到的字段不需要创建索引
- 重复值较多的字段不需要创建索引
索引是在存储引擎中实现的 , 使用不同的存储引擎 , 所支持的索引也是不同的 。
在mysql中常用两种索引结构BTree和Hash , 两种算法检索方式不一样 , 对查询的作用也不一样 。
MyISAM和InnoDB存储引擎只支持BTREE索引 , MEMORY/HEAP存储引擎支持HASH和BTREE索引 。
文章插图
MySQL的InnoDB存储引擎是支持hash索引的 , 不过我们必须启用 , hash索引的创建由InnoDB存储引擎自动优化创建 , 我们干预不了 。
索引的类型
索引的类型可以分类以下几种:
- 普通索引:最基本的索引 , 没有任何限制
- 唯一索引:索引字段的取值不能重复 , 可以有空值 , 但空值也只能出现一次 。
- 主键索引:索引字段的取值不能为空 , 也不能重复 。
- 组合索引:一个索引包含多个字段 , 只有在查询条件中使用了创建索引时的第一个字段 , 索引才会被使用 。
- 全文索引:通过关键字符 , 就能找到该字段所属的记录行 。 仅限MyISAM引擎 , 且只能在CHAR,VARCHAR,TEXT类型的字段上使用 。
- 空间索引:对空间数据类型(GEOMETRY、POINT、LINESTRING、POLYGON)的字段建立的索引 , 仅限MyISAM引擎 , 且要求索引字段的取值不能为空 。
实际上索引也是一张表 , 创建索引时 , 数据库管理系统会在本地磁盘建立索引文件 , 里面保存了索引字段 , 并指向实体表的记录 。
创建索引
创建表的同时须指定索引名、表名和字段名 。语法:
create index <索引名> on <表名>(<字段名>);
自动创建索引- 在表中定义了主键约束时 , 会自动创建一个对应的主键索引 。
- 在表中定义了外键约束时 , 会自动创建一个对应的普通索引 。
- 在表中定义了唯一约束时 , 会自动创建一个对应的唯一索引 。
mysql> create index job_index on emp(job);
查看索引语法:
show index from <表名>;
示例:查看emp表中的索引文章插图
使用索引
在查询语句中使用索引会大大提升数据的检索速度 。示例:
文章插图
删除索引
删除索引只是删除了表中的索引对象 , 表中的数据不会被删除 。语法:
drop index <索引名> on <表名>;
示例:文章插图
稿源:(未知)
【傻大方】网址:http://www.shadafang.com/c/111J2E202020.html
标题:MySQL性能优化( 二 )