MySQL索引规则

InnoDB 底层存储结构为B+树, B树的每个节点对应innodb的一个page,page大小是固定的,一般设为 16k。其中非叶子节点只有键值,叶子节点包含完成数据。

索引(Index)是帮助 MySQL 高效获取数据的数据结构。但是索引的规则有哪些呢?

  • 索引一定要命名规范,哪个库哪个表哪几个字段哪种类型索引

  • 选择唯一性索引——唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录

  • 为经常需要排序、分组和联合操作的字段建立索引

  • 为常作为查询条件的字段建立索引

  • 限制索引的数目:越多的索引,会使更新表变得很浪费时间。

  • 尽量使用数据量少的索引,大字段尽量不要使用索引,如果使用用MD5值

  • 如果索引的值很长,那么查询的速度会受到影响

  • 尽量使用前缀来索引-如果索引字段的值很长,最好使用值的前缀来索引

  • 删除不再使用或者很少使用的索引

  • 最左前缀匹配原则

  • 尽量选择区分度高的列作为索引区分度的公式是表示字段不重复的比例

  • 索引列不能参与计算,保持列“干净”:带函数的查询不参与索引

  • 尽量的扩展索引,不要新建索引

  • 尽量索引覆盖,不要回表操作

  • 如果是多个索引,指定索引提高查询效率

索引固然可以提高查询效率的,但是也有自己的局限性,数据搜索还是适合用ElasticSearch,但是mysql要做持久化,同步ES两种方法:一种是ES的java API接口,另外一种是通过 binlog日志 ,你们是怎么用的?


每周一句:他强由他强,清风拂山岗。他横任他横,明月照大江。直面自己的恐惧和焦虑,做一个内心强大的人!

本文分享自微信公众号 - 只喝牛奶的杀手(killerhub)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )