精华内容
下载资源
问答
  • a、非聚簇索引存储了对主键的引用,如果select字段不在非聚簇索引内,就需要跳到主键索引(上图中从右边的索引树跳到左边的索引树),再获取select字段值 b、如果非聚簇索引值重复率高,那么查询时就会大量出现上图...

     

     结论(以innodb为例)

    a、非聚簇索引存储了对主键的引用,如果select字段不在非聚簇索引内,就需要跳到主键索引(上图中从右边的索引树跳到左边的索引树),再获取select字段值

    b、如果非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的情况,导致整个流程很慢

    c、如果where值重复率高的字段,select用了limit,只查较少数据,也就是跳的次数很少的情况下,还是可以建索引的(后来想想也没必要,limit限制了数量,全表扫描也很快,除非字段值是排序的,必须扫描完前面的所有值)

    d、如果没有3这个前提,则不建议在值重复率高的字段上建索引,因为查询效率低,还需要维护索引

    展开全文
  • -- 查询性别字段中男性字段值与女性字段值的比例 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;
    • 结果
    1. 男性/女性=2.6667
    2. 男性/总人数=0.7273
    3. 总人数=11
    4. 男性人数=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

    展开全文
  • 大家都知道索引分聚集索引和非聚集索引,性别字段因为可重复肯定只能建立非聚集索引,然而因为非聚集索引叶子节点存储的是索引和聚集索引,需要回表。所以在性别这种辨别度较低的字段上建立索引,索引树可能只有...

    大家都知道索引分聚集索引和非聚集索引,性别字段因为可重复肯定只能建立非聚集索引,然而因为非聚集索引叶子节点存储的是索引值和聚集索引值,需要回表。所以在性别这种辨别度较低的字段上建立索引,索引树可能只有两个节点,跟线性查找没有太大区别,并且因为回表的存在导致在聚集索引树和非聚集索引树来回切换反而导致查询时间更慢。并且维护该索引还要一定的开销。另外,数据库优化器最终很大概率也不会选择走这个索引。综上,在辨别度较低的字段上建立索引得不偿失。

    但是,并不是通用规则!

    若这些可选择性非常低的字段,在其中的一种分布非常少,而且查询非常频繁的话,可以对该字段进行索引!

    比如有一个枚举字段[1,2,3], 在上百万行数据中,1占1%, 2占%2, 3占%97,然后业务经常需要查询1和2的数据,那么就可以在该字段进行索引。

    展开全文
  • mySQL怎么批量替换查询结果中的字段值。 不仅仅是简单替换某字段的,是替换查询结果的字段值。 比如会员表,在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...
  • 用户设置要现实的字段,比如用户选择要显示的字段是:姓名,性别,年龄这三个字段,其余字段就不显示 查询数据库获得的实体类里面包含了用户需要显示的字段,如何通过用户选择的字段去匹配获取相对应的? @Data public ...
  • 不要说性别字段只有两个,网友亲测,一个字段使用拼音首字母做,共有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
  • 特殊转义输出 查询Student表中的Number,class,gender,grade更名为 学号 班级 性别 成绩; 其中gender中值为0的输出男,为1输出女,其他输出X。 select Number 学号,class 班级, case gender when '0' then '...
  • 背景与探索最近在做一个简单的用户信息的查询及展示,其中在对用户性别判断的时候,出现了一个神奇的情况,首先数据库里有个表存储了性别字段 sex ,字段类型是:enum('0','1') DEFAULT NULL COMMENT '性别(0/女,1/...
  • SQL中字段值判断

    2008-03-01 12:34:00
    select 学号, 姓名, case when(性别=0) then '男' else '女' end 性别, 年龄 from 学生信息 转载于:https://www.cnblogs.com/achun/archive/2008/03/01/1087104.html
  • 不要说性别字段只有两个,网友亲测,一个字段使用拼音首字母做,共有26种可能,加上索引后,百万加的数据量,使用索引的速度比不使用索引要慢! 一个表可能会涉及两个数据结构(文件),一个是表本身,存放表中的...
  • 例:某数据库表存在3个字段,1.ID 2.Name 3.Sex (0:女性 1:男性) 若要在界面上显示名称和性别,则可以使用如下的数据库语句 SELECT NAME,CASE SEX WHEN 0 THEN '女' ELSE '男' END AS SEX FROM 表名 转载于:...
  • 修改作者性别字段属性2.修改个人日志页3.增加详情页面三、分页1.增加多条数据2.分页提供的方法3.分页的基本实现 一、路由的写法 name的使用 二、修改页面 1.修改作者性别字段属性 choices属性:由元组组成的一...
  • 目录 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 ...
  • 【单选题】在Access2010数据库的下列字段类型中,字段大小不固定的是()【单选题】对Access2010表中某一个字段建立索引时,若其由重复,可选择()索引【单选题】毒而致病的特点()【单选题】在Access2010数据库中,如果...
  • 用户在rule.xml中配置枚举文件路径和分片索引是字符串还是数字,DBLE在启动时会将枚举文件加载到内存中,形成一个映射表在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引会被提取出来...
  • 如果确定某个字段的数据只有那么几个:如性别,男、女、保密,系统就可以在设定字段的时候规定当前字段只能存放固定的几个:使用枚举基本语法:enum(数据1,数据2…)系统提供了1到2个字节来存储枚举数据:...
  • mysql 多表查询中 根据一个表中一个字段的最大求另一个字段,获取 查询最大的这条数据。 示例 表a: id name 1 张三 2 李四 表b: id sex a_id 1 女 1 2 男 2 表c: id a_id age ...
  • 例如 表a 工号 姓名 年龄 性别 001 张三 30 男 002 李四 40 男 表b 工号 姓名 性别 岗位 住址 如何把表a中的第一条记录的字段(工号,姓名,性别)的赋值给表b
  • 在数据库表中用0,1表示男女性别,在前端展示时显示男女 selectcasewhenuserSex=0then'男'else'女'enduserSex fromtable_name where 条件
  • 索引要建立在比较唯一的...如果索引建立在唯一比较少的字段,比如性别gender字段,寥寥无几的类别字段等,刚索引几乎没有任何意义。 转载于:https://www.cnblogs.com/kevinge/archive/2012/11/23/2784624.html...
  • 性别字段,如果为男,性别为0; 性别字段,如果为女,性别为1; 性别字段,如果为中性,性别为3; 在插入记录的时候,只会插入 姓名和性别两个字段。现在想要通过触发器来自动填充后面一个‘性别’字段...
  • 我想要导出的是姓名、年龄、性别,但是结果却是id、姓名、年龄

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 788
精华内容 315
关键字:

性别字段值