使用索引的意义
• 索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。
• 使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。
使用索引的代价
索引需要占用数据表以外的物理存储空间。
• 创建索引和维护索引要花费一定的时间。
• 当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。
• 创建索引的列
主键
• 外键或在表联接操作中经常用到的列
• 在经常查询的字段上最好建立索引
不创建索引的列
• 很少在查询中被引用
• 包含较少的惟一值
• 定义为 text、ntext 或者 image 数据类型的列
何时创建聚集索引?
Clustered Index会提高大多数table的性能,尤其是当它满足以下条件时:
1. 独特, 狭窄, 静止: 最重要的条件
2. 持续增长的,最好是只向上增加。例如:
• Identity
• Date, identity
• GUID (only when using newsequentialid() function)
以下情况不要建索引:
• 1、如果每次都需要取到所有表记录,无论如何都必须进行全表扫描了,那么是否加索引也没有意义了。
• 2、对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义。
• 3、对于记录比较少的表,增加索引不会带来速度的优化反而浪费了存储空间,因为索引是需要存储空间的,而且有个致命缺点是对于update/insert/delete的每次执行,字段的索引都必须重新计算更新
以下情况要建立索引
SELECT c.companyID, c.companyName FROM Companies c, User u WHERE c.companyID = u.fk_companyID AND c.numEmployees >= 0 AND c.companyName LIKE '%i%' AND u.groupID IN (SELECT g.groupID FROM Groups g WHERE g.groupLabel = 'Executive')
这条语句涉及3个表的联接,并且包括了许多搜索条件比如大小比较,Like匹配等。在没有索引的情况下Mysql需要执行的扫描行数是77721876行。而我们通过在companyID和groupLabel两个字段上加上索引之后,扫描的行数只需要134行。在Mysql中可以通过Explain Select来查看扫描次数。可以看出来在这种联表和复杂搜索条件的情况下,索引带来的性能提升远比它所占据的磁盘空间要重要得多。
数据库 索引学习
猜你喜欢
转载自lhgyy00.iteye.com/blog/1499758
今日推荐
周排行