性别字段为什么不适合加索引

刨冰雨 2011-09-24 12:08:31
弱弱的问一问,性别字段为什么不适合加索引?
...全文
1605 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
刨冰雨 2011-09-25
  • 打赏
  • 举报
回复
谢谢......................
刨冰雨 2011-09-25
  • 打赏
  • 举报
回复
OrchidCat 回答的不错
性别字段只有三个值,冗余性太高,定位性太差,维护成本较高,加了也不会对查询效率有所提高,所以这种字段不适合加牵引。

[Quote=引用 10 楼 orchidcat 的回复:]

索引的最主要目的就是快速查找,定位数据.

性别字段,就3个值Y X Null

在表中的定位性比较差,即便加上索引,优化器也是会认为此索引使用的成本过高。 而不会使用索引。

所以,这类定位性较差的数据,不加索引。
[/Quote]
Mr_Nice 2011-09-24
  • 打赏
  • 举报
回复
索引的最主要目的就是快速查找,定位数据.

性别字段,就3个值Y X Null

在表中的定位性比较差,即便加上索引,优化器也是会认为此索引使用的成本过高。 而不会使用索引。

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

面试的时候被问到,让我用索引的原理来解释,我实在没找到比较接近官方解释的答案。

引用 2 楼 qianjin036a 的回复:

因为只有两个值,比较很简单,排序也方便,加索引所消耗的系统资源比不加更多.
[/Quote]
noteasytoregister 2011-09-24
  • 打赏
  • 举报
回复
性别字段的选择性低,使用索引查找还不如遍历表的效率高,即使加了索引SQL Server也不会使用该索引查找。
刨冰雨 2011-09-24
  • 打赏
  • 举报
回复
是ETL的职位

[Quote=引用 5 楼 soonfei 的回复:]

引用 4 楼 andy20050125 的回复:
面试的时候被问到,让我用索引的原理来解释,我实在没找到比较接近官方解释的答案。


引用 2 楼 qianjin036a 的回复:

因为只有两个值,比较很简单,排序也方便,加索引所消耗的系统资源比不加更多.

你面试的是dba吗?
[/Quote]
诺维斯基 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 andy20050125 的回复:]
面试的时候被问到,让我用索引的原理来解释,我实在没找到比较接近官方解释的答案。


引用 2 楼 qianjin036a 的回复:

因为只有两个值,比较很简单,排序也方便,加索引所消耗的系统资源比不加更多.
[/Quote]
你面试的是dba吗?
刨冰雨 2011-09-24
  • 打赏
  • 举报
回复
面试的时候被问到,让我用索引的原理来解释,我实在没找到比较接近官方解释的答案。

[Quote=引用 2 楼 qianjin036a 的回复:]

因为只有两个值,比较很简单,排序也方便,加索引所消耗的系统资源比不加更多.
[/Quote]
AcHerat 元老 2011-09-24
  • 打赏
  • 举报
回复
如上,简单的字段就不需要了。
-晴天 2011-09-24
  • 打赏
  • 举报
回复
因为只有两个值,比较很简单,排序也方便,加索引所消耗的系统资源比不加更多.
dawugui 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 andy20050125 的回复:]
弱弱的问一问,性别字段为什么不适合加索引?
[/Quote]就三个男,女,NULL,没必要加.
我没有吃饭 2011-09-24
  • 打赏
  • 举报
回复
因为它会重复很多次,“如果只有很少的非重复值,如只有 1 和 0,则大多数查询将不使用索引,因为此时表扫描通常更有效”
langxingcs 2011-09-24
  • 打赏
  • 举报
回复
oracle 的话如果是olap系统要加b-tree索引。sql的不晓得

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧