1.建立索引的目的是加快对表中记录的查找或排序。为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。所以适用于查询多,插入修改少的操作
2.建立索引适用的列:
1)在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度
2)在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
3)在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
3.不该建立索引的列:
1) 对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
2)对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少,不利于使用索引。
3) 当修改性能远远大于检索性能时,不应该创建索引。
4.数据库优化
1)横向切表,适用于各数据之间独立(用户信息表),且集合统计操作不多
5.高效SQL
1) 减少数据库访问次数
2) 用Exist代替in
3)用union all代替union,因为union除了union all以外还要排序
4)当要在索引列上用or时,一般替换成Union,因为此时索引失效,全表扫描
5)避免在索引列上使用函数导致索引失效
6)虽然数据库可以自动转化,但不要比较不匹配类型
WHERE business_date = 20090201;
WHERE business_date = '20090201'