社区
疑难问题
帖子详情
选择性低但经常出现在where条件中的字段到底要不要建索引?
Powertion
2017-04-27 06:57:27
选择性低(指字段值种类比较少,比如性别字段只有男、女)
但经常出现在where条件中的字段到底建不建索引?
疑惑
...全文
1740
7
打赏
收藏
选择性低但经常出现在where条件中的字段到底要不要建索引?
选择性低(指字段值种类比较少,比如性别字段只有男、女) 但经常出现在where条件中的字段到底建不建索引? 疑惑
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gentleman♥️
2019-02-22
打赏
举报
回复
不太建议建,索引同样会占用硬盘空间的,数据量很大的时候,也是很恐怖的,再从另外一个方面说下 我的观点,这是因为这样的数据会分散在几乎所有的数据页中,这样的话,其实就是要把所有的数据页都加载到内存中了,这样的话,如果走索引,也是同样要加载所有的数据页到内存中,那索引这个步骤不就是多余了吗,要知道,索引中存在的数据,是在每一个个数据页中的,一个数据页会存有相应索引范围的一批数据的,而数据页是存放在硬盘上的
中国风
2017-04-28
打赏
举报
回复
不建议建,意义不大
当数据达到一定值时,都会走表扫描,是否走索引要看男/女在表占用的比例
在SQL2005时计算选择性的比例为 满足条件的行数/总行数<=0.7181,会走索引,其它会走表扫描,需要考虑特殊情况比如表数据量小<64K,SQL2012之后的版本是用列存储计算大小方式又有所不同
参照选择性就行了,有兴趣可以自己去不同版本中去测试,意义不大,掌握大概就行了
Powertion
2017-04-28
打赏
举报
回复
sqlserver文档说: 设计索引时,应考虑以下查询准则: 为经常用于查询中的谓词和联接条件的所有列创建非聚集索引。 又说: 在列中检查数据分布。通常情况下,为包含很少唯一值的列创建索引或在这样的列上执行联接将导致长时间运行的查询。 有一种说法(非官方),通过建立提高选择性的组合索引
卖水果的net
2017-04-28
打赏
举报
回复
这种情况,应该和其他的查询条件用到的字段,建立联合索引,而不是建立单列索引; 比如这样的查询比较多: select * from t where crdate > '2017-01-01' and sexid = '男' 可以建立如下索引: create index ix_t on t(crdate, sexid)
Powertion
2017-04-27
打赏
举报
回复
谢回答,我有几个字段长期固定要与另外一张表做关联,其中有两个字段的选择性相当低,基本上就是五五开了,是否也适用这种情况不用建索引?怎么总感觉关联字段都要建上索引呢
专注or全面
2017-04-27
打赏
举报
回复
1
看情况,举个例子,如果仅仅是男女,数据55开的,或者是只有1,2,3三种状态的且相对平均分布的,这种情况下索引是没用的(用不到的) 如果可以根据筛选条件过滤出来一个小的结果集,当然可以建索引 比如表中状态位有1,2,3,4,5,6,7,8,9等等,3,4,5,6,7,8,9占据了大部分数据,1,2只有少部分数据,当然可以在这个字段上建索引 对于3,4,5,6,7,8,9的查询可能不适用与索引查询,但是对于1,2就适合索引查找,那么此时建立个索引页无可厚非。
专注or全面
2017-04-27
打赏
举报
回复
看情况,举个例子,如果仅仅是男女,数据55开的,或者是只有1,2,3三种状态的,正常情况下是没用的 如果可以根据筛选条件过滤出来一个小的结果集,当然可以建索引 比如表中状态位有1,2,3,4,5,6,7,8,9等等,3,4,5,6,7,8,9占据了大部分数据,1,2只有少部分数据,当然可以在这个字段上建索引 对于3,4,5,6,7,8,9的查询可能不适用与索引查询,但是对于1,2就适合索引查找,那么此时建立个索引页无可厚非。
那些
字段
适不适合
建
索引
?
数据库
建
立
索引
常用的规则如下:1、表的主键、外键必须有
索引
; 2、数据量超过300的表应该有
索引
; 3、经常与其他表进行连接的表,在连接
字段
上应该
建
立
索引
; 4、
经常出现
在Where子句
中
的
字段
,特别是大表的
字段
,应该
建
立
索引
; 5、
索引
应该
建
在
选择性
高的
字段
上; 6、
索引
应该
建
在小
字段
上,对于大的文本
字段
甚至超长
字段
,
不要
建
索引
; 7、复合
索引
的
建
立需要进行仔细分析;尽量考虑
mysql男女
字段
应该
建
立
索引
吗_那些
字段
适不适合
建
索引
?
数据库
建
立
索引
常用的规则如下:表的主键、外键必须有
索引
;数据量超过300的表应该有
索引
;经常与其他表进行连接的表,在连接
字段
上应该
建
立
索引
;
经常出现
在Where子句
中
的
字段
,特别是大表的
字段
,应该
建
立
索引
;
索引
应该
建
在
选择性
高的
字段
上;
索引
应该
建
在小
字段
上,对于大的文本
字段
甚至超长
字段
,
不要
建
索引
;复合
索引
的
建
立需要进行仔细分析;尽量考虑用单
字段
索引
代替:正确选择复合
索引
中
的主列
字段
,一般是
选择性
...
哪些
字段
适合
建
立
索引
?如何
建
立
索引
1、表的主键、外键必须有
索引
; 2、数据量超过300的表应该有
索引
; 3、经常与其他表进行连接的表,在连接
字段
上应该
建
立
索引
; 4、
经常出现
在Where子句
中
的
字段
,特别是大表的
字段
,应该
建
立
索引
; 5、
索引
应该
建
在
选择性
高的
字段
上; 6、
索引
应该
建
在小
字段
上,对于大的文本
字段
甚至超长
字段
,
不要
建
索引
; 7、复合
索引
的
建
立需要进行仔细分析;尽量考虑用单
字段
索引
代替: A、正确选择复合
索引
中
的主列字...
Mysql哪些
字段
适合
建
立
索引
1 数据库
建
立
索引
常用的规则如下: 1、表的主键、外键必须有
索引
; 2、数据量超过300的表应该有
索引
; 3、经常与其他表进行连接的表,在连接
字段
上应该
建
立
索引
; 4、
经常出现
在Where子句
中
的
字段
,特别是大表的
字段
,应该
建
立
索引
; 5、
索引
应该
建
在
选择性
高的
字段
上; 6、
索引
应该
建
在小
字段
上,对于大的文本
字段
甚至超长
字段
,
不要
建
索引
; 7、复合
索引
的
建
立需要进行仔细分析;尽量考虑用单
字段
索引
代替: A、正确选择复合
索引
中
的主列
字段
,一般是
选择性
较好的
字段
; B 、复合
索引
的几个
字段
是否经常同时以AND
mysql 哪些
字段
加
索引
_mysql需要在哪些
字段
上加
索引
?
mysql需要加
索引
的
字段
:1、
经常出现
在Where子句
中
的
字段
,特别是大表的
字段
,应该
建
立
索引
;2、经常与其他表进行连接的表,在连接
字段
上应该
建
立
索引
;3、分组
字段
或者排序
字段
应该创
建
索引
;4、
选择性
高的
字段
上应该
建
立
索引
。1、表的某个
字段
值得离散度越高,该
字段
越适合选作
索引
的关键字。主键
字段
以及唯一性约束
字段
适合选作
索引
的关键字,原因就是这些
字段
的值非常离散。MySQL 在处理主键约束以及唯一...
疑难问题
22,300
社区成员
121,737
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章