-
为什么重复值高的字段不能建索引(比如性别字段等)
2019-04-19 07:35:51a、非聚簇索引存储了对主键的引用,如果select字段不在非聚簇索引内,就需要跳到主键索引(上图中从右边的索引树跳到左边的索引树),再获取select字段值 b、如果非聚簇索引值重复率高,那么查询时就会大量出现上图...结论(以innodb为例)
a、非聚簇索引存储了对主键的引用,如果select字段不在非聚簇索引内,就需要跳到主键索引(上图中从右边的索引树跳到左边的索引树),再获取select字段值
b、如果非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的情况,导致整个流程很慢
c、如果where值重复率高的字段,select用了limit,只查较少数据,也就是跳的次数很少的情况下,还是可以建索引的(后来想想也没必要,limit限制了数量,全表扫描也很快,除非字段值是排序的,必须扫描完前面的所有值)
d、如果没有3这个前提,则不建议在值重复率高的字段上建索引,因为查询效率低,还需要维护索引
-
MySQL中使用DML语句查询某字段中各字段值占比
2019-05-24 14:15:23-- 查询性别字段中男性字段值与女性字段值的比例 SELECT sum(CASE when sex='男' then 1 ELSE 0 END)/sum(CASE when sex='女' then 1 ELSE 0 END) from sex; -- 查询性别字段中男性字段值在字段值的总数中的占比 ...以性别字段为例:
- 表名:sex
- 字段名:sex
- 字段值:男或女
- 查询语句
-- 查询性别字段中男性字段值与女性字段值的比例 SELECT sum(CASE when sex='男' then 1 ELSE 0 END)/sum(CASE when sex='女' then 1 ELSE 0 END) from sex; -- 查询性别字段中男性字段值在字段值的总数中的占比 SELECT sum(CASE when sex='男' then 1 ELSE 0 END)/COUNT(*) from sex; -- 查询性别字段对应的字段值的总数 SELECT COUNT(*) from sex; -- 查询性别字段中男性字段值的总数 SELECT sum(CASE when sex='男' then 1 ELSE 0 END) from sex;
- 结果
- 男性/女性=2.6667
- 男性/总人数=0.7273
- 总人数=11
- 男性人数=8
-
从性别字段不适合建索引说起
2018-03-11 10:19:02不要说性别字段只有两个值,网友亲测,一个字段使用拼音首字母做值,共有26种可能,加上索引后,百万加的数据量,使用索引的速度比不使用索引要慢!一个表可能会涉及两个数据结构(文件),一个是表本身,存放表中的...理论文章会告诉你值重复率高的字段不适合建索引。不要说性别字段只有两个值,网友亲测,一个字段使用拼音首字母做值,共有26种可能,加上索引后,百万加的数据量,使用索引的速度比不使用索引要慢!
一个表可能会涉及两个数据结构(文件),一个是表本身,存放表中的数据,另一个是索引。索引是什么?它就是把一个或几个字段(组合索引)按规律排列起来,再附上该字段所在行数据的物理地址(位于表中)。比如我们有个字段是年龄,如果要选取某个年龄段的所有行,那么一般情况下可能需要进行一次全表扫描。但如果以这个年龄段建个索引,那么索引中会按年龄值建一个排列,这样在索引中就能迅速定位,不需要进行全表扫描。
为什么性别不适合建索引呢?因为你访问索引需要付出额外的IO开销,你从索引中拿到的只是地址,要想真正访问到数据还是要对表进行一次IO。假如你要从表的100万行数据中取几个数据,那么利用索引迅速定位,访问索引的这IO开销就非常值了。但如果你是从100万行数据中取50万行数据,就比如性别字段,那你相对需要访问50万次索引,再访问50万次表,加起来的开销并不会比直接对表进行一次完整扫描小。
当然凡事不是绝对,如果把性别字段设为表的聚集索引,那么就肯定能加快大约一半该字段的查询速度了。聚集索引指的是表本身中数据按哪个字段的值来进行排序。因此,聚集索引只能有一个,而且使用聚集索引不会付出额外IO开销。当然你得能舍得把聚集索引这么宝贵资源用到性别字段上。
参考文章:
https://www.cnblogs.com/sunxi/p/4011592.html
http://www.cnblogs.com/Lovepanda/archive/2010/03/24/MySql.html
-
为什么性别字段不适合建索引
2020-11-09 11:25:05大家都知道索引分聚集索引和非聚集索引,性别字段因为可重复肯定只能建立非聚集索引,然而因为非聚集索引叶子节点存储的是索引值和聚集索引值,需要回表。所以在性别这种辨别度较低的字段上建立索引,索引树可能只有...大家都知道索引分聚集索引和非聚集索引,性别字段因为可重复肯定只能建立非聚集索引,然而因为非聚集索引叶子节点存储的是索引值和聚集索引值,需要回表。所以在性别这种辨别度较低的字段上建立索引,索引树可能只有两个节点,跟线性查找没有太大区别,并且因为回表的存在导致在聚集索引树和非聚集索引树来回切换反而导致查询时间更慢。并且维护该索引还要一定的开销。另外,数据库优化器最终很大概率也不会选择走这个索引。综上,在辨别度较低的字段上建立索引得不偿失。
但是,并不是通用规则!
若这些可选择性非常低的字段,在其中的一种分布非常少,而且查询非常频繁的话,可以对该字段进行索引!
比如有一个枚举字段[1,2,3], 在上百万行数据中,1占1%, 2占%2, 3占%97,然后业务经常需要查询1和2的数据,那么就可以在该字段进行索引。
-
mySQL怎么批量替换查询结果中的字段值。
2019-12-12 00:38:04mySQL怎么批量替换查询结果中的字段值。 不仅仅是简单替换某字段的,是替换查询结果的字段值。 比如会员表,在mySQL,我先按照性别、有头像、已通过邮箱验证检索出一部分会员, ,我想把这些检索出来的会员... -
多表关联字段值替换sql语句
2018-04-14 14:56:39比如a表性别字段为代码表示,b表为该字段翻译码表,关联字段为id:select a.xb,decode(b.xb_mc,null,a.xb,b.xb_mc) from table a left join table b on a.id = b.id 若表b带条件,可用 select * from table b... -
java利用反射获取指定字段名的值和设置字段的值
2020-11-02 12:16:13用户设置要现实的字段,比如用户选择要显示的字段是:姓名,性别,年龄这三个字段,其余字段就不显示 查询数据库获得的实体类里面包含了用户需要显示的字段,如何通过用户选择的字段去匹配获取相对应的值? @Data public ... -
性别为什么不适合建立索引-值重复率高的字段不适合建索引
2019-03-23 11:04:29不要说性别字段只有两个值,网友亲测,一个字段使用拼音首字母做值,共有26种可能,加上索引后,百万加的数据量,使用索引的速度比不使用索引要慢! 一个表可能会涉及两个数据结构(文件),一个是表本身,存放表中的... -
sql按字段值进行统计
2019-10-02 00:53:05用group by 如有个student表里有性别sex来统计 select sex,count(*) from student group by sex; 转载于:https://www.cnblogs.com/chimmu/p/6212317.html -
SQL丨查询性别字段为0显示男,1显示女
2021-02-05 10:25:57特殊值转义输出 查询Student表中的Number,class,gender,grade更名为 学号 班级 性别 成绩; 其中gender中值为0的输出男,为1输出女,其他输出X。 select Number 学号,class 班级, case gender when '0' then '... -
mysql 字段值不同枚举_【mysql】关于枚举值 '1','0'的神奇判断
2021-01-21 17:03:46背景与探索最近在做一个简单的用户信息的查询及展示,其中在对用户性别判断的时候,出现了一个神奇的情况,首先数据库里有个表存储了性别字段 sex ,字段类型是:enum('0','1') DEFAULT NULL COMMENT '性别(0/女,1/... -
SQL中字段值判断
2008-03-01 12:34:00select 学号, 姓名, case when(性别=0) then '男' else '女' end 性别, 年龄 from 学生信息 转载于:https://www.cnblogs.com/achun/archive/2008/03/01/1087104.html -
MySQL 性别为什么不适合建立索引-值重复率高的字段不适合建索引【转载】
2020-05-11 15:11:06不要说性别字段只有两个值,网友亲测,一个字段使用拼音首字母做值,共有26种可能,加上索引后,百万加的数据量,使用索引的速度比不使用索引要慢! 一个表可能会涉及两个数据结构(文件),一个是表本身,存放表中的... -
解决数据库中字段值为数字,但界面上需要显示对应枚举值的问题
2018-12-07 09:52:00例:某数据库表存在3个字段,1.ID 2.Name 3.Sex (0:女性 1:男性) 若要在界面上显示名称和性别,则可以使用如下的数据库语句 SELECT NAME,CASE SEX WHEN 0 THEN '女' ELSE '男' END AS SEX FROM 表名 转载于:... -
路由的一种写法,修改页面(修改作者性别字段属性,修改个人日志页,增加详情页面)分页的实现 使用图片 富...
2019-09-16 23:24:15修改作者性别字段属性2.修改个人日志页3.增加详情页面三、分页1.增加多条数据2.分页提供的方法3.分页的基本实现 一、路由的写法 name的使用 二、修改页面 1.修改作者性别字段属性 choices属性:由元组组成的一... -
Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax...
2019-10-08 09:43:05目录 models 字段补充 choices 参数/字段(用的很多) MTV与MVC模型 科普 Ajax 发送 GET、POST 请求的几种常见方式 用 Ajax 做一个小案例 准备工作 动手用 Ajax ... -
update 表名 set 字段=值,数据更新
2019-09-28 05:21:44--数据更新 必须考虑是否有条件,往往能够做条件首先考虑主键值和唯一键语法:update 表名 set 字段=值,字段=值 .....where 条件 not|and|or--修改年龄 update Teacher set Age=18--将所有人年龄+1 设置表达式update ... -
在mysql中如何建立性别约束_在Access2010数据库中,要在表中建立“性别”字段,并按与要求用逻辑值表示,其...
2021-02-11 21:59:01【单选题】在Access2010数据库的下列字段类型中,字段大小不固定的是()【单选题】对Access2010表中某一个字段建立索引时,若其值由重复,可选择()索引【单选题】毒而致病的特点()【单选题】在Access2010数据库中,如果... -
mysql 性别字段枚举_在mysql中创建出来的数据表,性别用这个类型enum(‘男’,‘女'),为什么不显示呢,如...
2021-01-27 04:36:49用户在rule.xml中配置枚举值文件路径和分片索引是字符串还是数字,DBLE在启动时会将枚举值文件加载到内存中,形成一个映射表在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引值会被提取出来... -
mysql怎么限制输入男女_mysql 如何限制字段性别为男女
2021-01-19 02:44:03如果确定某个字段的数据只有那么几个值:如性别,男、女、保密,系统就可以在设定字段的时候规定当前字段只能存放固定的几个值:使用枚举基本语法:enum(数据值1,数据值2…)系统提供了1到2个字节来存储枚举数据:... -
mysql 多表查询中 根据一个表中一个字段的最大值求另一个字段
2020-11-30 16:21:04mysql 多表查询中 根据一个表中一个字段的最大值求另一个字段,获取 查询最大值的这条数据。 示例 表a: id name 1 张三 2 李四 表b: id sex a_id 1 女 1 2 男 2 表c: id a_id age ... -
DB2中如何把一个表中一条记录的多个字段的值赋值给另一个表中的相应字段
2015-08-06 05:54:54例如 表a 工号 姓名 年龄 性别 001 张三 30 男 002 李四 40 男 表b 工号 姓名 性别 岗位 住址 如何把表a中的第一条记录的字段(工号,姓名,性别)的值赋值给表b -
怎样转化从数据库查出的字段的值
2019-03-14 13:27:03在数据库表中用0,1表示男女性别,在前端展示时显示男女 selectcasewhenuserSex=0then'男'else'女'enduserSex fromtable_name where 条件 -
索引要建立在值比较唯一的字段
2012-11-23 16:02:00索引要建立在值比较唯一的...如果索引建立在唯一值比较少的字段,比如性别gender字段,寥寥无几的类别字段等,刚索引几乎没有任何意义。 转载于:https://www.cnblogs.com/kevinge/archive/2012/11/23/2784624.html... -
SQL触发器在插入记录中根据A字段自动给B字段赋值
2016-01-03 04:40:04性别字段,如果为男,性别值为0; 性别字段,如果为女,性别值为1; 性别字段,如果为中性,性别值为3; 在插入记录的时候,只会插入 姓名和性别两个字段。现在想要通过触发器来自动填充后面一个‘性别值’字段... -
Navicat Premium10、12导出记录时字段与值不匹配
2019-07-19 10:21:49我想要导出的是姓名、年龄、性别,但是结果却是id、姓名、年龄
-
基于微信的同城小程序、校园二手交易小程序 毕业设计毕设源码使用教程
-
【考研打卡】Day031——2021.03.03
-
嵘泰股份首次公开发行股票招股说明书.pdf
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
朱老师鸿蒙系列课程第1期-3.鸿蒙系统Harmonyos源码配置和管理
-
2014年重庆理工大学《物联网平台设计与开发》期末考试试卷).pdf
-
Windows10蓝牙驱动合集
-
小记:VirtuaBox虚拟机不能启动新任务错误解决办法
-
零基础极简以太坊智能合约开发环境搭建并开发部署
-
DT开源博客第一版.mp4
-
rslogix5000软件工具介绍.pdf
-
朱老师鸿蒙系列课程第1期-2鸿蒙系统Harmonyos源码架构分析
-
MySQL 事务和锁
-
2021-03-03
-
树莓派使用pwm控制风扇
-
生益电子首次公开发行股票并在科创板上市招股说明书.pdf
-
CCW软件基本使用介绍.docx
-
C和C++课程
-
Java IF的多选择和嵌套结构 -04天 学习笔记
-
Java复习------OOP