1.什么是索引?
索引是针对数据建立的目录。
2、为什么要使用索引?
加快查询速度(数据量大时,优势就体现出来了),一般使用的算法有:二叉查询数(二叉排序)、散列算法(哈希算法)(实现过程:数据存储的时候先通过哈希算法算出存储地址(如果算出的地址相同,则通过其他算法再次算出存储地址,如:开放寻址、再散列、链地址法、建立一个公共溢出区),然后再存储,而查询数据时也会先通过哈希算法计算出存储地址后直接取出数据,这样查询数据的效率就很高了,有甚至可以1次命中,而不足的是:存储数据时会浪费空间)
3、那么使用索引有缺点么?
肯定是有的,事物都是有两面性的,而使用索引的坏处就是:降低了增删改的速度、增大表的文件大小(索引文件可能大于数据文件),实践问题:如果一张大数据量表索引列比较多,而我们又要经常导入数据(无非就是insert语句),为了节约导入时间,我们必须要先删除索引、再到导入数据、最后再加索引。
4、添加索引的原则
1. 在经常用作过滤器的字段上建立索引;
2. 在SQL语句中经常进行GROUP BY、ORDER BY的字段上建立索引;
3. 在不同值较少的字段上不必要建立索引,如性别字段;
4. 对于经常存取的列避免建立索引;
5. 用于联接的列(主健/外健)上建立索引;
6. 在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照使用的频度来确定;
7. 缺省情况下建立的是非簇集索引,但在以下情况下最好考虑簇集索引,如:含有有限数目(不是很少)唯一的列;进行大范围的查询;充分的利用索引可以减少表扫描I/0的次数,有效的避免对整表的搜索。当然合理的索引要建立在对各种查询的分析和预测中,也取决于DBA的所设计的数据库结构。
5、索引类型
普通索引、主键索引、唯一索引、全文索引。
普通索引:加快查询速度。
唯一索引:加快查询速度以及行上的值不能重复。
主键索引:加快查询速度以及行上的值不能重复。主键索引比唯一,但唯一索引不一定是主键,在一张表上,只能有一个主键,但是一直表上可以有多个唯一索引。
全文索引:fulltext index 一般text类型适合做全文索引,对英文发挥作用,停止词。用法: where match (全文索引列) against ('索引的单词');
查看索引:show index from 表名
添加索引:create 索引类型(unique primary key 等 不加就是普通索引) index 索引名 on 表名(做索引的列名),方法二:也可以用alter table 表名 add index unique/fulltext 索引名 列名 alter table 表名 add primary key(列名)