索引

2018-08-16  本文已影响0人  糖炒栗子_01c5

索引

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

加快查找,可以理解为创建了一个索引目录每次查找会在目录中找到位置.

索引的目的在于提高查询效率,同样它也是约束(主键、唯一)。

索引的种类有:

普通索引:加速查找

主键索引:加速查找+不能为空+不能重复

唯一索引:加速查找+不能重复

联合索引(多列):     - 联合主键索引     - 联合唯一索引     - 联合普通索引

添加索引的方法:

在已经存在的表中添加索引:

ALTER TABLE tablename ADD primary key()

ALTER TABLE tablename ADD unique key()

添加普通索引:

 create index 索引名称 on tablename(列,..)

添加一个唯一索引

 create unique index 索引名称 on tablename(列,..)

组合索引(最左前缀匹配):

    - create unique index 索引名称 on 表名(列名,列名)

    - drop unique index 索引名称 on 表名

    - create index ix_name_email on userinfo3(name,email,)

    - 最左前缀匹配

删除索引:

 drop index 索引名称 on tablename

drop unique index 索引名称 on tablename

修改索引名称

对于MySQL 5.7及以上版本,可以执行以下命令

ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name

对于MySQL 5.7以前的版本,可以执行下面两个命令(先删除再添加):

ALTER TABLE tbl_name DROP INDEX old_index_name

ALTER TABLE tbl_name ADD INDEX new_index_name(column_name)

两个名称的概念:

覆盖索引:直接从索引文件中拿出对应的值,不再表中查找。

索引合并:把多个单列索引合并使用。

索引是在MYSQL的存储引擎层中实现的根据搜索引擎分类:

    B-Tree 索引:最常见的索引类型,大部分引擎都支持B树索引。

    HASH 索引:只有Memory引擎支持,使用场景简单。

    R-Tree 索引(空间索引):空间索引是MyISAM的一种特殊索引类型,主要用于地理空间数据类型。

    Full-text (全文索引):全文索引也是MyISAM的一种特殊索引类型,主要用于全文索引,InnoDB从MYSQL5.6版本提供对全文索引的支持。

    hash索引:单值快、范围(慢)

    btree索引: btree索引

        二叉树 (一种算法实现的)

创建索引的时候要了解的知识:

1.创建一个索引,提高了查找效率但是,牺牲了增、删、改效率

2.会加大磁盘空间的开销

3.设置最短索引

4.命中索引

5.类型不一致 如果列是字符串类型,传入条件是必须用引号引起来,不然...

6:用索引查询范围的话,如果市住建则还是会走索引

7.当根据索引排序时候,选择的映射如果不是索引,则不走索引 特别的:如果对主键排序,则还是走索引

8.组合索引最左前缀 如果组合索引为:(name,email) name and email -- 使用索引 name -- 使用索引 email -- 不使用索引

索引选择原则

1.较频繁的作为查询条件的字段应该创建索引

2.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

3.更新非常频繁的字段不适合创建索引

4.不会出现在 WHERE 子句中的字段不该创建索引

不要过度索引,只保持所需的索引。每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能。 在修改表的内容时,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的时间越长

其他注意事项

避免使用select *

count(1)或count(列) 代替 count(*)

创建表时尽量时 char 代替 varchar

表的字段顺序固定长度的字段优先

组合索引代替多个单列索引(经常使用多个条件查询时)

尽量使用短索引

使用连接(JOIN)来代替子查询(Sub-Queries)

连表时注意条件类型需一致

索引散列值(重复少的列做索引)不适合建索引,例:性别不适合

上一篇 下一篇

猜你喜欢

热点阅读