先说结论

重复性较强的字段,不适合添加索引。mysql给离散度低的字段,比如性别设置索引,再以性别作为条件进行查询反而会更慢。

原因

一个表可能会涉及两个数据结构(文件),一个是表本身,存放表中的数据,另一个是索引。索引是什么?它就是把一个或几个字段(组合索引)按规律排列起来,再附上该字段所在行数据的物理地址(位于表中)。比如我们有个字段是年龄,如果要选取某个年龄段的所有行,那么一般情况下可能需要进行一次全表扫描。但如果以这个年龄段建个索引,那么索引中会按年龄值根据特定数据结构建一个排列,这样在索引中就能迅速定位,不需要进行全表扫描。为什么性别不适合建索引呢?因为访问索引需要付出额外的IO开销,从索引中拿到的只是地址,要想真正访问到数据还是要对表进行一次IO。假如你要从表的100万行数据中取几个数据,那么利用索引迅速定位,访问索引的这IO开销就非常值了。但如果是从100万行数据中取50万行数据,就比如性别字段,那你相对需要访问50万次索引,再访问50万次表,加起来的开销并不会比直接对表进行一次完整扫描小。

当然如果把性别字段设为表的聚集索引,那么就肯定能加快大约一半该字段的查询速度了。聚集索引指的是表本身数据按哪个字段的值来进行排序。因此,聚集索引只能有一个,而且使用聚集索引不会付出额外IO开销。当然你得能舍得把聚集索引这么宝贵资源用到性别字段上。

可以根据业务场景需要,将性别和其它字段建立联合索引,比如时间戳,但是建立索引记得把时间戳字段放在性别前面。

mysql 离散度低 索引_mysql给离散度低的字段建立索引会出现什么问题,具体说下原因。...相关推荐

  1. mysql myisam 主键关联_MySQL中myisam和innodb的主键索引有什么区别?

    MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索 ...

  2. 覆盖索引与联合索引_Mysql性能优化:为什么要用覆盖索引?

    相信读者看过很多MYSQL索引优化的文章,其中有很多优化的方法,比如最佳左前缀,覆盖索引等方法,但是你真正理解为什么要使用最佳左前缀,为什么使用覆盖索引会提升查询的效率吗? 本篇文章将从MYSQL内部 ...

  3. MySql索引查询优化 千万级数据普通查询和建立索引后数据查询耗时对比

    前言 索引:拿汉语字典的目录页(索引)打比方,我们可以按拼音.笔画.偏旁部首等排序的目录(索引)快速查找到需要的字. 索引分单列索引和组合索引. 单列索引,即一个索引只包含单个列,一个表可以有多个单列 ...

  4. 性别字段建立索引问题

    性别字段能不能建立索引 之前面试被问到一个问题 什么字段适合建索引,什么字段不适合建索引. 性别字段可以建索引吗? 我回答得不是很好. 性别字段这种重复性很强的字段,不要建立索引.为什么不能呢? 下面 ...

  5. mysql myisam表加索引_MySQL中myisam和innodb的主键索引有什么区别

    ALTER TABLE t1 ADD INDEX(or CREATE INDEX) ALTER TABLE t1 ADD FULLTEXT INDEX ALTER TABLE t1 ADD COLUM ...

  6. mysql重建索引_mysql创建、删除、重建、删除索引的操作命令的一些总结

    创建索引 索引的创建可以在create table语句中进行,也可以在表创建完成后单独的使用create index或者alter table来给表增加索引.一下语句分别是如何创建主键的索引(prim ...

  7. Mysql修改字段名和长度_mysql中修改表字段名/字段长度/字段类型详解

    先来看看常用的方法 MySql的简单语法,常用,却不容易记住.当然,这些Sql语法在各数据库中基本通用.下面列出: 1.增加一个字段: alter table user add COLUMN new1 ...

  8. mysql降序后去重_Mysql 数据记录去重后按字段排序

    实现效果:去重-取最新的-排序 例子 : 按用户ID获取历史记录中某个人的记录,要求非重复的且每条只获取最新的,同时按添加时间倒序排列的 实现 :SELECT * FROM ( SELECT * FR ...

  9. mysql concat键值对_mysql中concat函数实现数据库字段合并查询

    concat()函数是mysql中用来字符类型的字段联合查询的一个不错的函数,但尽量不要使用哦, mysql中怎么合并两个字段为一个字段呢?试了好多方法,结果还是不是我想要的 例如:select (a ...

最新文章

  1. 这可能是第二好的自定义 View 教程之属性动画
  2. 聚类算法 距离矩阵_模糊聚类算法
  3. Linux下sync命令
  4. spring事物管理(配置文件方式)
  5. 机器人最新天赋符文天赋加点图_常德2020中小学机器人竞赛开赛 286名选手现场比拼技能...
  6. python中的while循环语句的数组循环_while循环
  7. TensorFlow神经网络(二)反向传播
  8. Atitit 标签式tab 切换的实现 Softdev=declare+intercept 申明+解释 软件=代码+文档 软件=数据结构+算法 软件=程序+数据+文档 申明式 decla
  9. ascii码表 java,JAVA实现打印ascii码表代码
  10. 如何下载Xcode DMG或XIP文件?
  11. 阿里云ACP认证考试笔记
  12. 135编辑器使用教程
  13. 带你一起敲敲ES6的新特性,边解释边应用!
  14. 第六章:详细设计。盒图、问题分析图即PAD图、过程设计语言PDL伪码
  15. 【数据治理】数据安全-数据脱敏方案
  16. Web 开发框架 — Express 精讲(安装使用、静态托管、路由处理、中间件的使用)
  17. HashMap 如何解决 hash 冲突
  18. ULN2803驱动模块的使用
  19. 10亿个数中找出最大的10000个数之top K问题
  20. 如何不写代码通过爬虫软件采集表格数据

热门文章

  1. [Python图像识别] 五十.Keras构建AlexNet和CNN实现自定义数据集分类详解
  2. requests+正则表达式爬取猫眼电影TOP100
  3. 后端技术大全(69个点)
  4. oschina / git-osc 工作流程
  5. 计算机室在初中英语教学中的应用,信息技术在初中英语教学中的运用
  6. 五个很酷的平铺窗口管理器
  7. 挂载nfs提示:mount.nfs: access denied by server while mounting...
  8. 手里的呼小九和课堂上的吵闹才是你最不舍的毕业季
  9. BZOJ_2194_快速傅立叶之二_(FFT+卷积)
  10. 百度与谷歌蜘蛛抓取 配置