mysql索引

MySQL开发规范与使用技巧总结

为君一笑 提交于 2020-02-13 20:23:52
1.命名规范 1.库名、表名、字段名必须使用小写字母,并采用下划线分割。 a)MySQL有配置参数lower_case_table_names,不可动态更改,linux系统默认为 0,即库表名以实际情况存储,大小写敏感。如果是1,以小写存储,大小写不敏感。如果是2,以实际情况存储,但以小写比较。 b)如果大小写混合使用,可能存在abc,Abc,ABC等多个表共存,容易导致混乱。 c)字段名显示区分大小写,但实际使⽤用不区分,即不可以建立两个名字一样但大小写不一样的字段。 d)为了统一规范, 库名、表名、字段名使用小写字母。 2.库名、表名、字段名禁止超过32个字符。 库名、表名、字段名支持最多64个字符,但为了统一规范、易于辨识以及减少传输量,禁止超过32个字符。 3.使用INNODB存储引擎。 INNODB引擎是MySQL5.5版本以后的默认引擘,支持事务、行级锁,有更好的数据恢复能力、更好的并发性能,同时对多核、大内存、SSD等硬件支持更好,支持数据热备份等,因此INNODB相比MyISAM有明显优势。 4.库名、表名、字段名禁止使用MySQL保留字。 当库名、表名、字段名等属性含有保留字时,SQL语句必须用反引号引用属性名称,这将使得SQL语句书写、SHELL脚本中变量的转义等变得⾮非常复杂。 5.禁止使用分区表。 分区表对分区键有严格要求;分区表在表变大后,执⾏行DDL

mysql 索引的理解-针对面试

风格不统一 提交于 2020-02-12 22:55:07
innodb 索引 索引是一颗B+tree(多路平衡查询树)。 B-tree 与B+tree区别 B-tree 每个节点从小到大排序。 每个节点指向下游节点。 每个节点对应data。可以理解为mysql 表一行记录。 B+tree 非叶子节点仅存储索引,不存储data。 叶子节点存储索引,与数据。 每一个父节点都会出现在子节点上。 mysql 对B+tree 进行了优化,每一个叶子节点都带有指向下一个叶子节点的指针。 聚簇索引与非聚簇索引 聚簇索引叶子节点指向data 聚簇索引叶子节点指向主键 来源: CSDN 作者: jiguansheng 链接: https://blog.csdn.net/jiguansheng/article/details/104271020

牛客网题目六

纵饮孤独 提交于 2020-02-12 17:01:47
1. 广义表 即我们通常所说的列表(lists)。它放松了对表元素的原子性限制,允许他们有自身结构。 广义表的长度:最大括号中的 逗号数+1 广义表的深度:展开后含括号的层数。 2. 数组和矩阵 不同,数组元素可以是字符,即字符数组,矩阵中都是数 3.环境变量可在编译source code时指定 javac一次可同时编译数个Java源文件 javac.exe能指定编译结果要置于哪个目录(directory) 4.通过 反射 可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法。 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成。 Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多。 5. 覆盖索引 :SQL只需要通过索引就可以返回查询所需要的数据,而不必通过二级索引查到主键之后再去查询数据。 覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点: 1)、索引项通常比记录要小,所以MySQL访问更少的数据。 2)、索引都按值得大小存储,相对于随机访问记录,需要更少的I/O。 3)、数据引擎能更好的缓存索引,比如MyISAM只缓存索引。 4)、覆盖索引对InnoDB尤其有用,因为InnoDB使用聚集索引组织数据,如果二级索引包含查询所需的数据

[内功修神]MySQL高级

自古美人都是妖i 提交于 2020-02-12 15:16:04
个人博客文章地址 文章目录 1. mysql的架构介绍 1.2. Mysql逻辑架构介绍 2. 索引优化分析 2.1. 常见通用的join查询 2.2. 索引简介 2.2.1. 定义:排好序的快速查找数据结构 2.2.2. 优势 2.2.3. 劣势 2.2.4. mysql索引分类 2.2.5. mysql索引结构 2.2.6 哪些情况需要创建索引 2.2.7 哪些情况不要创建索引 2.3. 性能分析 2.3.1 MySQL Query Optimizer![在这里插入图片描述](https://img-blog.csdnimg.cn/20200212101223600.png) 2.3.2 MySQL常见瓶颈 2.3.3 Explain 2.3.3.1 是什么(查看执行计划) 2.3.3.2 能干嘛 2.3.3.3 怎么玩 2.3.3.4 各个字段解释 2.3.4 索引优化 2.3.4.1 索引失效(应该避免) 2.3.4.1 一般性建议 3. Mysql锁机制 3.1 锁的分类 3.2 三锁 3.2.1 表锁(偏读) 3.2.2 行锁(偏写) 3.2.3 页锁 4. 主重复制 1. mysql的架构介绍 1.2. Mysql逻辑架构介绍 查看命令 MyISAM和InnoDB 2. 索引优化分析 2.1. 常见通用的join查询 SQL执行顺序 join图 2.2. 索引简介 2

数据库表的优化

断了今生、忘了曾经 提交于 2020-02-12 15:09:26
一、两表优化 两表建立左右连接要考虑性能问题,建索引记住左连接时mysql先考虑如何右表搜索行,右连接同理,规律是:左表连右表,右表建索引,右表连左表,左表建索引 二、三表优化 采用左关联两张表时,要在主表对应的外表字段建立索引 比如 select * from user lefit join order on user.cid=order.cid left join balance b on order.time=b.time; 对order的cid加索引和b.time Alter table ‘order’add index z(‘cid’); Alter table ‘balace index z(‘time’); 三、避免索引失效 1、全值匹配 Alter table ‘user index z(‘name’,’age’,’phone’); 多个索引列同时查询ok的,当name,phone查询索引部分使用到,name使用到索引,phone索引失效。 2、最佳左前缀 如果索引多个列,要遵守最左前缀法则,就是查询从最左索引开始,不能跳过左边索引列 比如: Alter table ‘user index z(‘name’,’age’,’phone’); 查询使用select *from user where age=1;失效,要保证有name,才能根据后面条件进行查询 3

Mysql索引学习笔记

空扰寡人 提交于 2020-02-12 07:05:38
1、分类   MySQL索引分为 普通索引、唯一索引、主键索引、组合索引、全文索引 。索引不会包含有null值的列,索引项可以为null(唯一索引、组合索引等),但是只要列中有null值就不会被包含在索引中。 (1)普通索引:create index index_name on table(column); 或者创建表时指定,create table(..., index index_name column); (2)唯一索引:类似普通索引,索引列的值必须唯一(可以为空,这点和主键索引不同) create unique index index_name on table(column);或者创建表时指定unique index_name column (3)主键索引:特殊的唯一索引,不允许为空,只能有一个,一般是在建表时指定primary key(column) (4)组合索引:在多个字段上创建索引,遵循最左前缀原则。alter table t add index index_name(a,b,c);    最左前缀原则 : https://mp.weixin.qq.com/s/RemJcqPIvLArmfWIhoaZ1g (5)全文索引:主要用来查找文本中的关键字,不是直接与索引中的值相比较,像是一个搜索引擎,配合match against使用,现在只有char,varchar

MySQL索引

柔情痞子 提交于 2020-02-12 06:35:31
1.B树与B+树的区别? 1. B+树改进了B树, 让内结点只作索引使用, 去掉了其中指向data record的指针, 使得每个结点中能够存放更多的key, 树的层高能进一步被压缩, 使得检索的时间更短. 2. 由于底部的叶子结点是链表形式, 因此也可以实现更方便的顺序遍历 2.MySQL中HASH索引和B+树索引的区别? B+索引: B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接 在B+树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动,而且基于索引的顺序扫描时,也可以利用双向指针快速左右移动,效率非常高。 哈希索引: 哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。 两者的区别: 1. 如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提 是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据 2. 从示意图中也能看到,如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算 法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索 3. 同理

mysql索引

蓝咒 提交于 2020-02-12 05:40:28
索引使用建议: a,经常检索的列 b,经常用于表连接的列 c,经常排序/分组的列 索引不使用建议: a,基数很低的列 b,经常用于表连接的列 c,经常排序/分组的列 innodb主键特点: a,索引定义时,若不显示包含主键,会隐式加入主键值; b,索引定义时,若显示包含主键,会加入主键值; c,在5.6.9后,优化器已经能自动识别索引末尾的主键值(index extensions),在这之前则需要显式加上主键列才可以被识别; d,修改主键必然重新拷贝整张表 主键的选择建议: a,对业务透明无意义,免收业务变化的影响; b,主键要很少修改和删除;(删除还好,影响不大,innodb小范围做数据页合并) c,主键最好是自增的; d,不要具有动态属性,例如最后修改时间戳;(如果经常变化会导致聚集索引的值发生变化,相应的导致btree索引值旋转、分裂、位移) innodb聚集索引选择顺序原则: a,显示声明的主键; b,第一个不包含null值的唯一索引列; c,内置的rowid(自增逻辑值,6byte且不可引用) innodb聚集索引不建议选用频繁更新、随机写入(离散IO) 唯一索引(unique key) a,不允许具有索引值相同的行,从而禁止重复的索引或键值; b,在唯一约束上,和主键一样(以myisam引擎为代表); c,和主键区别:1,唯一索引允许有空值(null) 2

mysql索引原理

时光怂恿深爱的人放手 提交于 2020-02-12 04:40:05
为什么要使用索引?使用索引有什么优点和缺点? 使用索引是为了使我们查询变得更快。使用索引如果我们对数据进行修改或者删除那么他的索引也要随之改变,所以使用索引就会降低我们修改删除的效率。 mysql有几种索引类型? 普通索引:这一类索引可以创建在任何数据类型中,没有限制。 唯一索引:创建该类索引时,需要保证创建索引的那一列值是唯一的。 全文索引:全文索引只能创建在CHAR,VARCHAR,TEXT类型的字段上,主要是为了提高查询较大字符串的查询速度,只有MyISAM存储引擎支持 单列索引:在表中给单个列创建索引,单列索引可以是普通索引,唯一索引,全文索引 多列索引:在同一张表的多个列上创建索引 索引为什么会使查询效率大大提高? mysql默认使用的是B+树的数据结构。 索引:排好序的数据结构,类似于书的目录,我们可以通过一本书的目录,快速查找到我们需要的内容,而不需要一页一页的去查看。 mysql索引数据结构为什么要默认使用B+树,而不使用其他的数据结构? 据我了解的数据结构有,二叉树,红黑树,B树,B+树 (他们都有一个共同的特点,就是右边的数据一定都比左边的小) 二叉树: 以上两组数据虽然数字是一样的但是他们的顺序不一样,所以构建出来的二叉树不一样,通过上面这张图可以看出来,如果如果数据是从大到小或者是从小到大的顺序插入,这样会导致二叉树变为链表数据结构,链表查询效率比较慢

MySQL:索引

﹥>﹥吖頭↗ 提交于 2020-02-12 03:38:02
  索引的目的在于提高查询效率,它的作用就相当于一本书的目录; 1. 常见的索引模型 1.1 哈希表   优点:适用于等值查询的场景;   缺点:范围查询效率较低; 1.2 有序数组   优点:范围查询和等值查询效率较高;   缺点:插入、删除操作效率较低;   适用于静态存储引擎,保存一些不会修改的数据; 1.3 搜索树   二叉树是一个经典的数据结构,增删改查效率都不错。不过由于索引需要存储在磁盘中,使用二叉树时,当节点数量很大时,树的高度会变的很高,一次查询可能访问很多数据块,由于磁盘IO问题,导致效率偏低;   为了查询中尽量减少磁盘IO,必须访问尽量少的数据块,N叉树就是一个不错的选择;N叉树由于 读写性能上的优点 ,以及 适配磁盘的访问模式 ,已经广泛的用于搜索引擎。   磁盘IO是非常高昂的操作, 当进行一次磁盘IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内 ,因为 局部预读性原理 告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page)。具体一页有多大数据跟操作系统有关,一般为4k或8k,也就是我们读取一页内的数据时候,实际上才发生了一次磁盘IO。   设计数据库时,我们可以将N叉树的一个节点的大小设计为刚好一个操作系统的数据页大小