【正确答案】
B
【答案解析】 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。一个设计良好的索引可以让数据库的操作效率提高几十倍甚至几百倍,但索引并非越多越好,因为太多索引会影响数据的更新操作,对一个存在大量更新操作的表而言,所建索引的数目一般不要超过3个,最多不要超过5个。
建立索引通常有以下几点原则:
1)定义主键的数据列一定要建立索引。
2)定义有外键的数据列一定要建立索引。
3)对于经常查询的数据列最好建立索引。
4)对于需要在指定范围内快速或频繁查询的数据列最好建立索引。
5)经常用在where子句中的数据列最好建立索引。
6)经常出现在关键字order by、group by、distinct后面的字段,最好建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则,索引不会被使用。
7)对于那些查询中很少涉及的列、重复值比较多的列不要建立索引。
8)对于定义为text、image和bit的数据类型的列不要建立索引。
9)对于经常存取的列避免建立索引。
10)对于复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此,将应用频度高的字段放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。
本题中,对于选项A,在关系数据库表中,如果没有主键和唯一索引,表中可以有重复的记录。所以,选项A错误。
对于选项B,主键具有唯一性,完全满足唯一索引的特征,因此,数据库会对主键默认建立唯一索引。所以,选项B正确。
对于选项C,索引需要存储空间来存放,如果插入、更新和删除操作在一个事务里面,那么这些操作不会引起索引的更新,只有执行commit语句才会引起索引的更新。所以,选项C错误。
对于选项D,当数据库有一个组合索引(例如把两列col1和col2作为一个组合索引),此时,如果查询条件中只用到了col2,索引就不会被用到了,所以,选项D错误。
所以,本题的答案为B。