弱弱的问一问,性别字段为什么不适合加索引?

解决方案 »

  1.   

    性别字段的选择性低,使用索引查找还不如遍历表的效率高,即使加了索引SQL Server也不会使用该索引查找。
      

  2.   

    首先你得理解索引是用来干什么的
    然后再来介绍为什么性别字段为什么不适合建立索引
    下面是索引的定义
    索引的用途
    索引是以表列为基础的数据库对象,它保存着表中排序的索引列,并且记录了索引列在数据表中的物理存储位置,实现了表中数据的逻辑排序,其主要目的是提高SQL Server系统的性能,加快数据的查询速度和减少系统的响应时间。 
    使用索引的代价 
    建立索引的几点原则。
    (1) 定义有主键的数据列一定要建立索引。因为主键可以加速定位到表中的某一行。
    (2) 定义有外键的数据列一定要建立索引。外键列通常用于表与表之间的连接,在其上创建索引可以加快表间的连接。
    (3) 对于经常查询的数据列最好建立索引。
    ① 对于需要在指定范围内快速或频繁查询的数据列,因为索引已经排序,其指定的范围是连续的,查询可以利用索引的排序,加快查询的时间。
    ② 经常用在WHERE子句中的数据列,将索引建立在WHERE子句的集合过程中,对于需要加速或频繁检索的数据列,可以让这些经常参与查询的数据列按照索引的排序进行查询,加快查询的时间。
    (4) 对于那些查询中很少涉及的列、重复值比较多的列不要建立索引。例如,在查询中很少使用的列,有无索引并不能提高查询的速度,相反增加了系统维护时间和消耗了系统空间;又如,“性别”列只有列值“男”和“女”,增加索引并不能显著提高查询的速度。
    (5) 对于定义为text、image和bit数据类型的列不要建立索引。因为这些数据类型的数据列的数据量要么很大,要么很小,不利于使用索引。
      

  3.   

    索引的最主要目的就是快速查找,定位数据.性别字段,就3个值Y X Null在表中的定位性比较差,即便加上索引,优化器也是会认为此索引使用的成本过高。 而不会使用索引。 所以,这类定位性较差的数据,不加索引。
      

  4.   

    oracle 的话如果是olap系统要加b-tree索引。sql的不晓得
      

  5.   

    OrchidCat 回答的不错
    性别字段只有三个值,冗余性太高,定位性太差,维护成本较高,加了也不会对查询效率有所提高,所以这种字段不适合加牵引。