社区
MS-SQL Server
帖子详情
性别字段为什么不适合加索引
刨冰雨
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的不晓得
JIRA三级权限方案 - 项目、单据、
字段
不同级别的权限控制
如何配置Jira项目权限方案? 能控制不同成员访问不同单据和
字段
吗? 能限制某些成员能看到但是不能编辑单据和
字段
吗? Jira作为一款优秀的项目管理系统,功能全面,配置灵活,权限方案完善,可扩展、可定制。 本课程介绍权限控制的具体实施方案,针对项目、单据、
字段
,演示三种不同层级粒度权限的配置、扩展和定制方法,提供脚本代码,应用于实际业务场景。
性别
字段
为什么不
适合
加
索引
?从 B+树原理解释。
尽量选择区分度高的
字段
作为
索引
,区分度的公式是 count(distinct col)/count(*),表示
字段
不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是 1,而一些状态、
性别
字段
可能在大数据面前区分度就是 0。在
性别
字段
上增
加
索引
,并不能明显
加
快检索 速度 ...
为什么
性别
字段
不
适合
建
索引
大家都知道
索引
分聚集
索引
和非聚集
索引
,
性别
字段
因为可重复肯定只能建立非聚集
索引
,然而因为非聚集
索引
叶子节点存储的是
索引
值和聚集
索引
值,需要回表。所以在
性别
这种辨别度较低的
字段
上建立
索引
,
索引
树可能只有两个节点,跟线性查找没有太大区别,并且因为回表的存在导致在聚集
索引
树和非聚集
索引
树来回切换反而导致查询时间更慢。并且维护该
索引
还要一定的开销。另外,数据库优化器最终很大概率也不会选择走这个
索引
。综上,在辨别度较低的
字段
上建立
索引
得不偿失。 ...
[InnoDB]
性别
字段
为什么不
适合
加
索引
表结构与数据 id为主键,id为5,15,25,35…时sex=1 sex=0,90000条数据;sex=1,10000条数据 CREATE TABLE `people` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `sex` tinyint(1) unsi...
MS-SQL Server
34,593
社区成员
254,590
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章