性别字段为什么不适合加索引 弱弱的问一问,性别字段为什么不适合加索引? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 性别字段的选择性低,使用索引查找还不如遍历表的效率高,即使加了索引SQL Server也不会使用该索引查找。 首先你得理解索引是用来干什么的然后再来介绍为什么性别字段为什么不适合建立索引下面是索引的定义索引的用途索引是以表列为基础的数据库对象,它保存着表中排序的索引列,并且记录了索引列在数据表中的物理存储位置,实现了表中数据的逻辑排序,其主要目的是提高SQL Server系统的性能,加快数据的查询速度和减少系统的响应时间。 使用索引的代价 建立索引的几点原则。(1) 定义有主键的数据列一定要建立索引。因为主键可以加速定位到表中的某一行。(2) 定义有外键的数据列一定要建立索引。外键列通常用于表与表之间的连接,在其上创建索引可以加快表间的连接。(3) 对于经常查询的数据列最好建立索引。① 对于需要在指定范围内快速或频繁查询的数据列,因为索引已经排序,其指定的范围是连续的,查询可以利用索引的排序,加快查询的时间。② 经常用在WHERE子句中的数据列,将索引建立在WHERE子句的集合过程中,对于需要加速或频繁检索的数据列,可以让这些经常参与查询的数据列按照索引的排序进行查询,加快查询的时间。(4) 对于那些查询中很少涉及的列、重复值比较多的列不要建立索引。例如,在查询中很少使用的列,有无索引并不能提高查询的速度,相反增加了系统维护时间和消耗了系统空间;又如,“性别”列只有列值“男”和“女”,增加索引并不能显著提高查询的速度。(5) 对于定义为text、image和bit数据类型的列不要建立索引。因为这些数据类型的数据列的数据量要么很大,要么很小,不利于使用索引。 索引的最主要目的就是快速查找,定位数据.性别字段,就3个值Y X Null在表中的定位性比较差,即便加上索引,优化器也是会认为此索引使用的成本过高。 而不会使用索引。 所以,这类定位性较差的数据,不加索引。 oracle 的话如果是olap系统要加b-tree索引。sql的不晓得 OrchidCat 回答的不错性别字段只有三个值,冗余性太高,定位性太差,维护成本较高,加了也不会对查询效率有所提高,所以这种字段不适合加牵引。 case when 问题 大家看看update型触发器究竟错哪了? 看邹建书,上面说"曾因一个电源,导致SQL SERVER无法安装"? 有关校验码的算法...急...(在线等) sql server 视图问题 [供应] 进销存管理系统源码 高分求解SQL语句 交易记录备份问题 租用万网数据库(.mdb)后,如何将其中的表复制出来? 分组查询的问题 update触发器?? 请教大家,如何检查并整理SQL 2000数据库碎片?
然后再来介绍为什么性别字段为什么不适合建立索引
下面是索引的定义
索引的用途
索引是以表列为基础的数据库对象,它保存着表中排序的索引列,并且记录了索引列在数据表中的物理存储位置,实现了表中数据的逻辑排序,其主要目的是提高SQL Server系统的性能,加快数据的查询速度和减少系统的响应时间。
使用索引的代价
建立索引的几点原则。
(1) 定义有主键的数据列一定要建立索引。因为主键可以加速定位到表中的某一行。
(2) 定义有外键的数据列一定要建立索引。外键列通常用于表与表之间的连接,在其上创建索引可以加快表间的连接。
(3) 对于经常查询的数据列最好建立索引。
① 对于需要在指定范围内快速或频繁查询的数据列,因为索引已经排序,其指定的范围是连续的,查询可以利用索引的排序,加快查询的时间。
② 经常用在WHERE子句中的数据列,将索引建立在WHERE子句的集合过程中,对于需要加速或频繁检索的数据列,可以让这些经常参与查询的数据列按照索引的排序进行查询,加快查询的时间。
(4) 对于那些查询中很少涉及的列、重复值比较多的列不要建立索引。例如,在查询中很少使用的列,有无索引并不能提高查询的速度,相反增加了系统维护时间和消耗了系统空间;又如,“性别”列只有列值“男”和“女”,增加索引并不能显著提高查询的速度。
(5) 对于定义为text、image和bit数据类型的列不要建立索引。因为这些数据类型的数据列的数据量要么很大,要么很小,不利于使用索引。
性别字段只有三个值,冗余性太高,定位性太差,维护成本较高,加了也不会对查询效率有所提高,所以这种字段不适合加牵引。