作为开发人员,数据库的索引是我们再熟悉不过的了。那么实话真的会了吗,在项目开发中随便定义一个int、varchar后边跟个primary key或者加个index就好了么?考虑到这些咋还真的需要看看专业的人都是怎么做的。在mysql中索引是提升性能的常用工具,一般来说我们就是通过让where的条件字段变成索引,或者如果where条件比较多的话一般将前边的条件做成索引。这样就可以通过索引快速筛选大量数据,然后在小范围的结果集中通过全表扫描的方式进行目标检索。在mysql中每个列都可以被索引,但是对于每种表类型来说,索引的数量和索引的本身字段长度都有限制。比如myisam、innodb、memory等每个表至少支持16个索引。索引长度至少256字节。mysisam和innodb表的默认索引为Btree索引,支持前缀索引,也就是对一个字段的前多少个字符建立的索引,对于myisam表来说索引的前缀可达1000字节,而对innoDb来说其前缀索引最长为767字节。mysql中还支持全文索引,这种索引可以做全文检索使用,但是全文索引只限于char、varchar和text字段列。默认情况下,memory使用的是hash索引,但也支持btree索引如何对一个字段创建索引?

-- 对test表的name字段的前5个字段检索索引create index name_index on test(name(5))-- 当然,我们也可以看看我们的索引在检索的时候是否被使用了explain select * from test where name!=''

-- 如果您要删除索引drop index name_index on test;

索引创建的原则

1.不一定要选择所有选择的列,最适合索引的列是出现在where字句中的列,而不是select中的列2.使用唯一索引,考虑某个列值得分散。索引的列的基数越大索引效果越好。例如存放出生日期的列具有不同值,很容易区分,而使用性别的话区分度不大。3.使用短索引,如果对字符串进行索引,应该指定一个前缀长度,比如一个字段varchar(300),但是前10到20字段就能区分,那么在前10到20个字符上建立索引就可以区分很多数据,而且还可以节省索引空间。磁盘io也会变少,而且mysql在内存中可以存储更多的缓存,所以检索会变快。4.利用最左前缀,在创建一个n列索引的时候,实际上创建了mysql可利用的n个索引,多列索引可起多个索引的作用,但是匹配的时候都是通过最左进行的。5.不要过度索引,每个索引都要占据磁盘空间,并降低写操作的性能,在修改表的时候索引也要同步更新甚至重构,所以索引越多会带来一定的损耗。所以说如果一个索引经常不用那么这个索引就是负担。所以的创建索引要以优化检索为目的,但不能损耗插入的性能。6.innodb表默认是按照一定顺序存储的,也就是说如果指定了主键则按照主键顺序进行保存,如果没有主键但是有唯一索引,那么innodb会按照唯一索引的顺序进行存储,如果都没有的话,innodb会生成一个内部列并按这个列的顺序进行存储。检索的时候按主键或者内部列是最快的。所以innodb表最好指定主键,另外innodb表的普通索引也会存储主键的键值,所以在设置主键的时候尽量选用短数据类型,从而减轻索引的磁盘空间,提高索引的缓存效果。

Btree和Hash索引

memory可以选择btree和hash索引,但是hash索引的使用要注意哦!因为hash索引是通过计算得出的具体数据地址,索引hash索引肯定不能使用= 或者》= 和《=等运算符,当然也不能使用order by进行排序。hash索引只能通过关键字来检索一行数据。对于in查询来说,btree和hash索引并没有什么差别。在对范围进行查询的时候,只能使用btree索引。如果对hash索引采用范围查询,那么将是全表扫描式的检索。要注意的是memory表的默认索引模式为hash索引。大多数的mysql索引,比如primary key、unique、index、fulltext等都是在btree中存储,除此之外memory还支持hash索引。

mysql怎么实现生日字段前一个小时提醒_MySql学习笔记(二) 索引的设计和使用...相关推荐

  1. mysql原生建立索引_MySQL学习笔记之索引

    索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...

  2. mysql 查找相似数据_MySQL学习笔记之索引

    索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...

  3. mysql数据类型选择_MySQL学习笔记(二):MySQL数据类型汇总及选择参考

    本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型. ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定哪 ...

  4. mysql对所有id求积_MySQL学习笔记(二)—查询

    一.多表连接查询 新建两张表t_user.t_order.       1.内连接 返回满足条件的所有记录. (1)显式内连接 使用inner join关键字,在on子句中设定连接条件. SELECT ...

  5. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 ​ 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...

  6. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...

  7. Mysql学习笔记(二)——表格及数据的插入

    Mysql学习笔记(二)--表格及数据的插入 文章目录 Mysql学习笔记(二)--表格及数据的插入 1.Mysql常用指令 2.创建表格 A.数据类型 B.完整性约束条件 3.查看表格 4.修改表格 ...

  8. mysql select语句详解_mysql学习笔记之完整的select语句用法实例详解

    本文实例讲述了mysql学习笔记之完整的select语句用法.分享给大家供大家参考,具体如下: 本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order ...

  9. mysql 加号的作用_MySQL学习笔记(一)

    MySQL学习笔记(一) 作者:易成勇 案例来源:AI技术前线 MySQL常用命令 1.查看当前所有数据库 show databases; 2.打开指定的库 use 库名 3.查看当前库的所有表 sh ...

最新文章

  1. GNN教程:与众不同的预训练模型!
  2. ASP.NET在IIS7中上下文中不可用
  3. linux日常管理-防火墙selinux
  4. 苹果iPhone SE 2概念视频放出:全面屏的小屏机
  5. Python 面向对象高级编程——定制类
  6. CodeBlocks调试功能(转)
  7. 【paper and code】StarGAN
  8. hutool excel导出
  9. 使用ConfuserEx实现项目加密
  10. DG449 High Voltage Single SPDT Analog Switch in SOT23-8
  11. 任正非《一江春水向东流》读后感
  12. python中引号的使用规范_Python中单引号和双引号的作用
  13. Buffon's Needle An Analysis and Simulation------蒙特卡洛法模拟蒲丰(Buffon)投针实验-使用Matlab
  14. Win7 下安装 Visual Studio 2008 失败的解决办法
  15. 登陆验证码图片不显示解决办法
  16. 孙陶然:有态度就是进取
  17. ker矩阵是什么意思_用初等变换求逆矩阵的小小解释
  18. 免费小程序制作平台体验感受分享
  19. AI大事件 | WaveNet推出了谷歌助手,苹果发布CoreML转换器
  20. [手机分享]黑莓手机9系列分享之——黑莓9630

热门文章

  1. 计算机网络——TCP/IP参考模型和五层参考模型
  2. python selenium模拟键盘_SELENIUM自动化模拟键盘快捷键操作实现解析
  3. c++ vector用另一个vector初始化
  4. can't request region for resource [mem 0xfed40080-0xfed40fff]问题的解决办法
  5. RecyclerView拖拽排序和滑动删除实现
  6. 【年度回忆录】如何做到1年90000粉丝?
  7. 安卓逆向_25 --- 密码学 之 《Java加密与解密的艺术》
  8. 安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】
  9. linux 的 grep 命令 和 ngrep 命令
  10. 扩展立方体 The Scale Cube