目录
一:创建表的时候就创建索引的样例
create table if not exists 'target.table'
(
id,
report_date,
fence_id,
region_key
primary key('id'),
key 'fence_key' ('fence_id'),
key 'region_key' ('region_code')
)Engine = Innodb default charset = utf8mb4 comment = "注释"
二:什么是索引?为什么要创建索引?
索引用于快速找出在某个列有一特定值的行,不使用索引,mysql必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,mysql能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。
举例说明:有一张表,有2万条记录,记录2万个人的信息。表中有一个phone字段记录每个人的电话号码,现在要查询电话号码为xxx的人的信息。如果没有索引,那么将从表中第一条记录一天天往下遍历,直到找到该条信息为止。如果有了索引,那么会将该phone字段,通过一定的方法进行存储,好让在查询该字段上的信息时候,能够快速找到对应的数据,而不必要进行全表遍历。其中,mysql中的索引的存储类型有两种:btree, hash.(innodb和myisam存储索引,只支持btree索引)
三:索引的分类
索引分为四类:单列索引(普通索引,唯一索引,主键索引),组合索引,全文索引。
- 单列索引:一个索引只包含单个列,但是一个表中可以有多个单列索引。
- 普通索引:mysql中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和 空值,纯粹为了查询数据更快一点。
- 唯一索引:索引列中的值必须是唯一索引,但允许有空值。
- 主键索引:是一种特殊的唯一索引,不允许有空值。
- 组合索引:在表的多个字段上创建的索引,只有在查询条件中使用了这些字段的左边时,索引才会使用,使用索引时遵循最左前缀集合。
- 全文索引
- 空间索引:空间索引是对空间数据类型的字段建立的索引。
四:索引的创建和删除
4.1 建表语句是时候就用key或者index创建
创建的时候可以看上面第一节中的语句,使用index或者key都可以。
【注意】:我们在创建索引时候没有写索引名称的话,会自动帮我们用字段名称当作索引名。
index multi_index(id,name,age)
4.2 表已经存在,为表添加索引
alter table book add index name_index(id,name,book);
4.3 查看表的索引
show index from book\G;
4.4 删除索引
alter table book dropindex. name_index;
参考: