MyISAM

爱了爱了,Alibaba顶级MySQL调优手册到手,加薪妥了

南楼画角 提交于 2020-12-12 15:33:58
实际工作中,有时候打开一个页面响应时间非常慢,这背后通常牵涉到SQL语句查询慢的问题。 前面我们提到很多数据库结构设计,建索引等来视图提高MySQL的性能。但是如果我们实际业务场景中,SQL查询语句写的不合适,索引建的再好可能也达不到预期的高性能。 因此,我们很有必要对查询进行分析,我写的查询为什么慢,该怎么样对查询进行优化。 关于 MySQL 相关的内容,Alibaba肯定还是很有话语权的,尤其是关于 MySQL的使用 ,所以今天我们要分享的内容,实际上就是 Alibaba顶级MySQL调优手册 ,看完你也不得不感叹这份 极品手册 啊! 由于文章篇幅有限,下文中的内容只展示这份手册的目录以及部分内容截图, MySQL高级调优笔记主要内容 由于文档内容过多,因此为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的 看文末有免费的获取方式! 第一部分 : MySQL 常用对象 Linux安装MySQL及启动 MySQL对象 - 索引 MySQL对象 - 视图 MySQL对象 - 存储过程 MySQL对象 - 触发器 第二部分 : MySQL体系结构,存储引擎及SQL优化 MySQL 体系结构 MySQL 存储引擎 MySQL 优化步骤 MySQL 索引的使用 MySQL - SQL优化 第三部分 : MySQL缓存,参数调整及锁 MySQL - 应用优化 MySQL

图解 MySQL 索引,写得实在太好了!

可紊 提交于 2020-12-12 07:13:35
Java技术栈 www.javastack.cn 关注阅读更多优质文章 作者:小小木的博客 www.cnblogs.com/wyc1994666/p/10831039.html 开门见山,直接上图,下面的思维导图即是现在要讲的内容,可以先有个印象~ 常见索引类型(实现层面) 索引种类(应用层面) 聚簇索引与非聚簇索引 覆盖索引 最佳索引使用策略 1.常见索引类型(实现层面) 首先不谈Mysql怎么实现索引的,先马后炮一下,如果让我们来设计数据库的索引,该怎么设计? 我们首先思考一下索引到底想达到什么效果?其实就是想能够实现 快速查找 数据的策略,所以索引的实现本质上就是一个 查找算法 。 但是跟普通的查找有所不同,因为我们的数据有一下特征: 1.存储的数据是非常非常多的 2.并且还不断的动态变化 所以实现索引时需要考虑到这两个特点。我们需要找一个最合适的数据结构算法来实现查找功能。 下面一起看下常见的查找策略,如下图: 由于前面说的两个特点我们首先排除静态查找的算法。 至于查找树,我们有二叉树和多叉树两种选择: 二叉树 :如果先泽二叉树的话,由于我们的数据量庞大,二叉树的深度会变得非常大,我们的索引树会变成参天大树,每次查询会导致很多磁盘IO。 多叉树 :多叉树解决了了树的深度大的问题,那么我们到底选择B树还是B+树呢? B树 摘自维基百科 https://zh.wikipedia

java后端开发面经 数据库相关

|▌冷眼眸甩不掉的悲伤 提交于 2020-12-09 04:17:25
小姐姐: 怎么理解感情中的付出和回报? 你答: 有这样一个故事,讲的是一个小男孩和一个小女孩,这个小男孩呢,用很多好玩石头,而这个小女孩呢,有好多好吃的糖果,有一天,他们相互约定:小男孩用所有的石头交互小女孩所有的糖果。到了交换的那一天,小女孩带上了所有的糖果,而小男孩自己偷偷留下了一些石头,就这样他们交换了。这天晚上啊,小女孩睡的特别踏实,而小男孩呢,总是睡不着,他总在想,小女孩是不是也留下了一些糖果呢? 感情呢,往往就是这样。但是:如果我们自己都没有真心实意的付出,那又怎么能去强求别人,揣测别人呢? 1 自我介绍 (您好(人多就说大家好),很荣幸有机会参加此次面试,希望我今天能有好的表现,现在请允许我介绍一下自己:我叫变坏,今年18岁,毕业于牛客大学软件工程专业(或者说是牛客大学软件工程专业的应届生),在大学期间专业课学习了java这门编程语言,自己在网上也学习了一些相关的技术,在校期间自己也曾和同学使用java开发过一些项目,在学校也曾考取过相关的证书,获得过一些比赛的奖,大学期间还担任过课代表,由于毕业将近,本人决定踏上社会道路,因此在牛客平台看到贵公司的招聘,在此之前也曾在网上了解过贵公司(不要去问公司业务,网上都可以查的),巴拉巴拉吹一吹。从以上简单的自我介绍里,我希望公司能给我一个展示自己能力的机会) 2 触发器的作用 (触发器是一中特殊的存储过程

MySQL的SQL语句

主宰稳场 提交于 2020-12-08 09:55:52
添加和删除列 使用ADD向表中添加新列,使用DROP删除现有列。DROP col_name是对标准SQL的MySQL扩展。 若要在表行的特定位置添加列,请使用FIRST col_name 或者 AFTER col_name。默认情况是添加到最后。 如果表只包含一列,则不能删除该列。如果您想要删除表,请使用DROP TABLE语句。 如果从表中删除列,那么列也将从其所属的任何索引中删除。如果组成一个索引的所有列都被删除,那么这个索引也会被删除。如果使用CHANGE或MODIFY缩短存在索引的列,而结果列长度小于索引长度,MySQL会自动缩短索引。 对于ALTER TABLE ... ADD,如果列具有使用非确定性函数的表达式默认值,则语句可能会产生警告或错误。 重命名、重新定义和重新排序列 CHANGE、MODIFY、RENAME COLUMN 和 ALTER子句允许更改现有列的名称和定义。它们具有以下比较特征: ●CHANGE: ■ 可以重命名列并更改其定义。 ■ 具有比MODIFY、RENAME COLUMN更多的功能,但以牺牲某些操作的便利性为代价。如果不重命名,CHANGE 需要对列进行两次命名,如果只重命名,则需要重新指定列定义。 ■ 使用FIRST或AFTER,可以对列重新排序。 ●MODIFY: ■ 可以更改列定义,但不能更改列的名称。 ■ 更改列定义而不重命名比

MySQL锁:InnoDB行锁需要避免的坑

生来就可爱ヽ(ⅴ<●) 提交于 2020-12-06 18:32:15
前言   换了工作之后,接近半年没有发博客了(一直加班),emmmm.....今天好不容易有时间,记录下工作中遇到的一些问题,接下来应该重拾知识点了。因为新公司工作中MySQL库经常 出现查询慢,锁等待,节点挂掉........等一系列问题 。导致每个程序员头都很大,一味抱怨“ 为什么我就查一条数据这么卡”,"我TM加了索引的啊,怎么还怎么慢 "...........我想默默说的是,大部分MySQL出现锁等待, 查询奇慢的情况基本都是因为SQL写的不好(有坑),或者数据表设计的不完善 。对,不用想!这些所有的坑很大一部分都是自己造成的。那么是什么原因造成的,大部分只是抱怨,而不去关注MySQL的一些细节问题,比如: MySQL行锁的细节,什么情况下会使用表锁等 。所以今天先讨论记录下InnoDB特有的行锁的一些细节,加强认识。    InnoDB不同于MyISAM最大的两个特点就是:一是支持事务,二是支持行锁 ;毋庸置疑,因为这两个特性大部分都采用InnoDB引擎,其中的支持行锁就是InnoDB适合多并发优势所在,但是行锁的一些细节没有深入理解过的话,可能会造成一定的误解,造成“ 看似命中索引,走行锁,结果却是表锁,最终导致锁等待情况 ”。 一、 InnoDB行锁的实现方式    通过给索引上的索引项加锁来实现的,也就意味着: 只有通过索引条件检索数据, InnoDB 才使用行级锁

数据库面试题整理

帅比萌擦擦* 提交于 2020-12-06 02:53:24
数据库 以下是对面试常见面试题整理,来自知乎大神分享的pdf,引用部分链接已给出,如果有没有标注的,纯属意外,希望提醒。这篇主要整理出来给自己看的 B/B+树 B/B+ 一、B树: 定义:B 树又叫平衡多路查找树。一棵m阶的B 树 的特性如下: 树中每个结点最多含有m个孩子(m>=2); 除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]个孩子(其中ceil(x)是一个取上限的函数); 若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根结点为叶子结点,整棵树只有一个根节点); 所有叶子结点都出现在同一层, 叶子结点不包含任何关键字信息 每个非终端结点中包含有n个关键字信息: (n,P0,K1,P1,K2,P2,......,Kn,Pn)。其中: Ki (i=1...n)为关键字,且关键字按顺序升序排序K(i-1)< Ki Pi为指向子树根的接点,且指针P(i-1)指向子树种所有结点的关键字均小于Ki,但都大于K(i-1)。 关键字的个数n必须满足: [ceil(m / 2)-1]<= n <= m-1。如下图所示: B树中的每个结点根据实际情况可以包含大量的关键字信息和分支(当然是不能超过磁盘块的大小,根据磁盘驱动(disk drives)的不同,一般块的大小在1k~4k左右);这样树的深度降低了

MYSQL利用merge存储引擎来实现分表

拟墨画扇 提交于 2020-12-05 22:12:56
创建user1和user2两个分表 建表语句如下:只是表名不一样,其他字段信息及主键一致。 CREATE TABLE IF NOT EXISTS user1( id INT( 11) NOT NULL AUTO_INCREMENT, NAME VARCHAR( 50) DEFAULT NULL, sex INT( 1) NOT NULL DEFAULT '0', PRIMARY KEY (id) )ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT= 1; CREATE TABLE IF NOT EXISTS user2( id INT( 11) NOT NULL AUTO_INCREMENT, NAME VARCHAR( 50) DEFAULT NULL, sex INT( 1) NOT NULL DEFAULT '0', PRIMARY KEY (id) )ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT= 1; 加入测试数据: INSERT INTO user1(NAME,sex) VALUES( 'huangbaokang', 0) INSERT INTO user2(NAME,sex) VALUES( 'zhanglulu', 0) 创建总表: CREATE TABLE IF

MySql(七):MySQL性能调优——锁定机制与锁优化分析

随声附和 提交于 2020-12-05 07:00:32
针对多线程的并发访问,任何一个数据库都有其锁定机制,它的优劣直接关系着数据的一致完整性与数据库系统的高并发处理性能。锁定机制也因此成了各种数据库的核心技术之一。 不同数据库存储引擎的锁定机制是不同的 ,本文将从MySQL最常见的存储引擎MyISAM与InnoDB的锁定机制说起。 一、MyISAM的锁机制——表级锁定 MySQL表级锁定的常见类型主要分为两种,一种是读锁,一种是写锁。 谁持有读锁?谁持有写锁?谁在等待读锁资源?谁在等待写锁资源?数据库系统都是要记录的。MySQL中,主要通过如下4个队列来保存相关信息: 读锁持有队列:Current read-lock queue(lock->read)——存放所有正在锁定的读锁信息 写锁持有队列:Current write-lock queue(lock->write)——存放所有正在锁定的写锁信息 读锁等待队列:Pending read-lock queue(lock->read_wait)——存放所有等待对资源加读锁的线程信息 写锁等待队列:Pending write-lock queue(lock->write_wait)——存放所有等待对资源加写锁的线程信息 为保证数据一致完整性,多线程可以为同一份资源加多个读锁,而同一份资源只能加一个写锁,读锁与写锁也不能同时加在一份资源上。 1、读锁定 客户端请求获取读锁定资源时

mysql的这些坑你踩过吗?快来看看怎么优化mysql?

人盡茶涼 提交于 2020-12-04 17:56:06
什么是mysql? 如果你的回答是关系型数据库,那就会显得有些浅薄。我们平时工作中肯定会用到mysql,但是谈到mysql,就不能只说增删改查。 接下来我们从另一个角度认识一下mysql(其实不仅仅是mysql,对于任何一个产品、服务,我们都应该有一个抽象化的架构,而不能局限于这个产品的某一个区域) mysql的逻辑分层 连接层:提供客户端的连接功能和权限认证, 服务层: 提供用户使用的接口(curd,主从配置,数据备份等) sql优化器(mysql query optimizer) # 联合索引 a b c select * from table1 where a=xxx and c=xxx and b=xxx; #经过优化器优化后可以使用索引, 复制代码 引擎层 :提供存储数据的方式(innodb myisam archive ,memory,csv,federated ),Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB,myisam 和innodb的区别:https://segmentfault.com/a/1190000021995700 mysql> show engines -> ; +--------------------+---------+------------------------------------------

那些年被面试官怼的 MySQL 索引

自作多情 提交于 2020-12-04 08:16:06
点击上方 " 程序员小乐 "关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 A single hand that wipes tears during failures is much better than countless hands that come together to clap on success. 失败时有人伸出一只手来为你擦泪,会好过成功时无数人伸手为你鼓掌。 每日掏心 话 当看破一切的时候才知道,其实失去比拥有更踏实。 来自:NebulaGraph | 责编:乐乐 链接:my.oschina.net/u/4169309/blog/3216614 程序员小乐(ID:study_tech) 第 826 次推文 图片来自百度 往日回顾: Google 出品的 Java 编码规范,强烈推荐,权威又科学! 正文 之前有过一次面试,关于MySQL索引的原理及使用被面试官怼的体无完肤,立志要总结一番,然后一直没有时间(其实是懒……),准备好了吗? 索引是什么? 数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,它可以对数据库表中一列或多列的值进行排序,以协助更加快速的访问数据库表中特定的数据。通俗的说,我们可以把数据库索引比做是一本书前面的目录,它能加快数据库的查询速度。 为什么需要索引? 思考:如何在一个图书馆中找到一本书