在一些面试的场景中,我们常会被问到索引的创建原则,那么索引应该如何创建呢?
今天我们就写一篇总结,并结合一些网上其他博主的观点,进行一个知识的区块汇总
(1)创建原则
举个例子,比方说客户的手机花费剩余情况这个数据表,怎么建索引,以什么为索引
常理来讲,这个表应该大致包含以下几个列:IdentifyID、PhoneNum、Balance
那么在这个表中就应该找IdentifyID或者PhoneNum作为索引,当然PhoneNum
肯定是唯一的,而且是不会发生变化的,所以最好的选择是以PhoneNum作为创建索引的列,它不会说因为数据的更新而更新了,那样的话,一直变那索引表也会变,所以这个肯定是不行的大兄弟。其实一般的时候数据量不是特别大,基本上建不建索引差距真的是不大。索引虽然说提高了数据的访问速度,但同时也增加了插入、更新和删除操作的处理时间。
此外我们在创建索引时可以遵循下面的一般性原则:
(1)为经常出现在关键字order by、group by、distinct后面的字段,建立索引。
在这些字段上建立索引,可以有效地避免排序操作。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。
(2)在union等集合操作的结果集字段上,建立索引。其建立索引的目的同上。
(3)为经常用作查询选择的字段,建立索引。
(4)在经常用作表连接的属性上,建立索引。
(5)考虑使用索引覆盖。对数据很少被更新的表,如果用户经常只查询其中的几个字段,可以考虑在这几个字段上建立索引,从而将表的扫描改变为索引的扫描。
(2)创建方法
以mysql中为例
命令行-自查
常用的两种索引创建方式:
(1)CREATE INDEX index_name ON table_1(filed_1);
(2)ALTER TABLE table_1 ADD INDEX(field_1);
区别
1.使用CREATE创建索引必须提供索引名称,而ALTER方式可以不提供则MySQL会自动为你创建索引名称,如果想使用ALTER方式自定义创建索引名称,可以类似如下SQL语句:
1.mysql> ALTER TABLE table_1 ADD INDEX index_name(field_1,field_2);
2.CREATE 方式创建索引,一次只能创建一个索引。ALTER方式可以一次创建多个索引,类似如下SQL语句:
mysql> ALTER TABLE table_1 ADD PRIMARY KEY(id), ADD INDEX index_name_1(field_1,field_2), ADD IND
web ui client 创建
里面有个设计表,就可以建立索引了