MyISAM

mysql优化——查询优化

馋奶兔 提交于 2020-08-14 06:16:22
这一篇mysql优化是注重于查询优化,根据mysql的执行情况,判断mysql什么时候需要优化,关于数据库开始阶段的数据库逻辑、物理结构的设计结构优化不是本文重点,下次再谈。 查看mysql语句的执行情况,判断是否需要进行优化 当感觉操作数据库查询语句速度变慢,不符合生产效率要求时,可按照以下步骤进行查看 1、 慢查询的开启与捕获,查看可能是哪些SQL语句造成的查询速度慢 2、 explain+SQL语句 3、 show profile分析SQL语句在服务器内执行细节和生命周期情况 4、 通过以上三个步骤大致确定问题SQL之后,可联系运维人员或者DBA进行数据库服务器参数的调整优化 以下分别通过程序员可分析的前三个方面来讨论mysql语句的查询优化 一、慢查询 慢查询日志是mysql的一个日志记录,可以用来记录mysql语句执行时间超过指定的long_query_time的SQL语句,long_query_time的默认值是10s。 慢查询日志默认情况下是不开启的,因为将数据保存到日志会对性能有一定影响,测试环境下可手动打开,但注意手动开启之后只对本次启动生效,mysql关闭之后重启恢复默认状态,要想持久生效要改变my.ini配置文件(Window系统下),其他系统变量也如此。 可通过show varaibles like '%slow_query_log%'来查看日志开启情况。

数据库初探(1)————关于InnoDB和MyISAM两种数据库存储引擎

南笙酒味 提交于 2020-08-14 05:13:14
1.mysql中最常见的两种数据库引擎 InnoDB存储引擎:InnoDB存储引擎是Mysql的默认事务引擎,也是最重要,使用最广泛的存储引擎,它被设计用来处理大量的短期事务,短期事务大部分情况下都是可以正常提交的,很少回滚。 MyISAM存储引擎:MyISAM存储引擎在MYSQL5.1之前的版本是默认的存储引擎,它支持大量的特性,包括全文检索,压缩等,但是它不支持行级锁和事务,而且有一个很严重的缺点就是奔溃后无法安全恢复。 2.在弄清楚MyISAM和InnDB存储引擎之前,我们先来搞懂什么是表级锁,什么是行级锁,什么是页级锁? 表级锁:正如他的名字一样,是锁定整张表,是Mysql目前为止锁粒度最大的锁定机制。一个用户在对表进行写操作之前,回先获得写锁,这样会阻塞其他用户的读写操作,只有没有写锁的时候,用户才会获得读锁,但是读锁之间不相互阻塞。 优点:逻辑非常简单,因为是锁定整张表,所以获取锁和释放锁的速度非常快,还可以防止死锁的发生。 缺点:因为是锁定整张表,所以锁的共享资源非常多,在并发情况下性能比较低。 使用的场景:适合以查询为主,只有按少量索引条件更新数据的应用。 支持的存储引擎:MySAM和InnoDB 行级锁:正如它的名字一样,是锁定表中的一行数据,是Mysql目前为止锁粒度最小的锁定机制,仅对指定的数据加锁,这样其他进程也会对这张表中的其他数据进行操作。 优点

MySQL配置优化

耗尽温柔 提交于 2020-08-14 04:04:42
MySQL参数优化对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系, 优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳效果。 下面列出了对性能优化影响较大 的主要变量,主要分为连接请求的变量和缓冲区变量 1、连接请求的变量 1). max_connections MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当 然这建立在机器能支撑的情况下,因为如果连接数越多, MySQL会为每个连接提供连接缓冲区,就会开 销越多的内存,所以要适当调整该值,不能盲目提高设值。 数值过小会经常出现ERROR 1040: Too many connections错误,可以通过 mysql> show status like 'connections'; 通配符查看当前状态的连接数量(试 图连接到MySQL(不管是否连接成功)的连接数),以定夺该值的大小。 mysql> show variables like 'max_connections'; # 查看最大连接数 +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 151 | +----------------

MySQL数据库优化技巧

独自空忆成欢 提交于 2020-08-14 03:42:28
MySQL优化三大方向 ① 优化MySQL所在服务器内核(此优化一般由运维人员完成)。 ② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。 ③ 对SQL语句以及表优化。 MySQL参数优化 1:MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看 mysql> show variables like 'max_connections'; 2:查看当前访问Mysql的线程 mysql> show processlist; 3:设置最大连接数 mysql>set globle max_connections = 5000; 最大可设置16384,超过没用 4:查看当前被使用的connections mysql>show globle status like 'max_user_connections' 对MySQL语句性能优化的16条经验 ① 为查询缓存优化查询 ② EXPLAIN 我们的SELECT查询(可以查看执行的行数) ③ 当只要一行数据时使用LIMIT 1 ④ 为搜索字段建立索引 ⑤ 在Join表的时候使用相当类型的列,并将其索引 ⑥ 千万不要 ORDER BY RAND () ⑦ 避免SELECT * ⑧ 永远为每张表设置一个ID ⑨ 可以使用ENUM 而不要VARCHAR ⑩ 尽可能的使用NOT NULL

垃圾就不配有周末,数据库基本操作,会持续更新。

最后都变了- 提交于 2020-08-14 03:35:18
一,数据库基本操作 1 显示数据库 show databases 2 创建数据库 create database xxx 3 删除数据库 drop databese xxx 删库需谨慎 哈哈 4 查看数据库定义信息 show create database xxx 5 查看表 show tables 6 创建表 create table xxx() 7 主键约束 primary key 8 联合主键 primary key(xx,xx,xx) 9 外键约束 constrant <外键名> foreign key 字段名 references <主表名> 主键列 10 unique 唯一约束 constraint xxx unique(xxx) 11 默认约束 default 定义表时给个默认值 12 查看表的字段信息 desc + 表名 13 查看表详细结构语句 show create table xxx; 14 修改表名称 alter table xxx rename xxx 15 修改字段的数据类型 alter table xxx madify 字段 + 类型 16 修改表字段名 alter table xxx change 旧字段名 新字段名 类型 17 添加字段 alter table xxx add 字段名 类型 [完整性约束] 18 在表的第一列添加一个字段 alter

Mysql常见面试题

时光毁灭记忆、已成空白 提交于 2020-08-13 18:44:23
说说自己对于 MySQL 常见的两种存储引擎:MyISAM与 InnoDB的理解 关于二者的对比与总结: count运算上的区别 :MyISAM有缓存,因此在做COUNT(*)时不需要消耗多少资源的。而对于InnoDB来说,则没有这种缓存。 是否支持事务和崩溃后的安全恢复 : MyISAM 性能高,执行速度比InnoDB更快,但是不提供事务支持。InnoDB 支持事务,外部键等高级数据库功能。 是否支持外键 : MyISAM不支持外键,而InnoDB支持。 MyISAM更适合 读 密集的表,而InnoDB更适合 写 密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。 一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。如果你的数据量很大,而且不需要支持事务时,MyISAM是好的选择。 数据库索引了解吗 为什么索引能提高查询速度 索引做了些什么可以让我们查询加快速度呢?其实就是将无序的数据变成有序(相对): 很明显的是:没有用索引我们是需要遍历双向链表来定位对应的页,现在通过 “目录” 就可以很快地定位到对应的页 上了!(二分查找,时间复杂度近似为O(logn)) 当MySQL单表记录数过大时,数据库的CRUD性能会明显下 降,一些常见的优化措施如下: 限定数据的范围 读写分离 垂直分区 水平分区 什么是事务

centos7.2编译安装mysql5.5.32

萝らか妹 提交于 2020-08-13 18:34:18
红帽7以上系统默认数据库不再是mysql了,rpm和yum方式安装的都是mariadb,但也不是不能装mysql,可以使用编译安装的方式来装mysql。 实验环境:centos7.2 实验目标:安装并配置mysql5.5.32 新增分区 先通过fdisk创建一个新分区,配额,用来存放mysql的数据: 刷新硬盘信息: #partprobe devices 格式化新增分区: # mkfs.xfs /dev/vdb3 根目录创建mysql数据挂载点(根据实际情况) # mkdir /data 编辑/etc/fstab,新增一行设置开机自动挂(参数根据实际情况): /dev/vdb3 /data xfs defaults 0 0 执行mount -av,根据fstab文档自动挂载: # mount -av 安装mysql 开始安装之前,先把mysql用户删除掉,否则是编译不成功的。注意使用 -r 全部清空。 # userdel -r mysql # grep mysql /etc/passwd 创建一个mysql用户,设置成8001 # useradd -u 8001 -s /sbin/nologin mysql 安装依赖以及必要工具: yum –y install ncurses-devel yum –y install cmake yum –y install gcc-c++开始

简单了解InnoDB底层原理

半世苍凉 提交于 2020-08-13 17:57:59
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 存储引擎 很多文章都是直接开始介绍有哪些存储引擎,并没有去介绍存储引擎本身。那么究竟什么是存储引擎?不知道大家有没有想过,MySQL是如何存储我们丢进去的数据的? 其实存储引擎也很简单,我认为就是一种存储解决方案,实现了新增数据、更新数据和建立索引等等功能。 有哪些已有的存储引擎可以让我们选择呢? InnoDB、MyISAM、Memory、CSV、Archive、Blackhole、Merge、Federated、Example 种类很多,但是常用的存储引擎目前就只有InnoDB和MyISAM,我也会着重来介绍这两种存储引擎。 InnoDB是目前使用最广的MySQL存储引擎,MySQL从5.5版本开始InnoDB就已经是默认的存储引擎了。那你知道为什么InnoDB被广泛的使用呢?先把这个问题放一放,我们先来了解一下InnoDB存储引擎的底层原理。 InnoDB的内存架构主要分为三大块,缓冲池(Buffer Pool)、重做缓冲池(Redo Log Buffer)和额外内存池 缓冲池 InnoDB为了做数据的持久化,会将数据存储到磁盘上。但是面对大量的请求时,CPU的处理速度和磁盘的IO速度之间差距太大,为了提高整体的效率, InnoDB引入了缓冲池。 当有请求来查询数据时

最真实的一次spring面试,问完我哭了!

穿精又带淫゛_ 提交于 2020-08-13 16:18:11
面试官: 看你简历上写了读过Spring源码,是吗? 我: 是的 面试官: 读过哪些部分的? 我: 读过Spring的启动过程源码,比如扫描包、执行Bean工厂后置处理器、Bean的生成过程等(自信满满) 面试官: 读得还挺多,那你可以说说一个Bean是怎么生成的吗? 我: Bean的生成过程就是Bean的生命周期,包括Bean的实例化、属性注入、初始化等等(险过....) 面试官: 嗯,那可以再详细一点说说实例化吗?比如,如果一个类有多个构造方法,Spring该选择哪个构造方法来进行实例化呢? 我: 这个...,我就不会了 面试官: 好,那关于属性注入你了解多少,比如@Autowire注解的工作原理,这个注解加在属性上和加在方法上,在底层原理上有什么区别? 我: 我不知道,只知道byname和bytype 面试官: 好,那Spring我们就先到这,我来问问你Mysql,Mysql中有哪些存储引擎? 我: 我就知道Innodb和MyISAM, 有其他的,但是记不起来了 面试官: 那Innodb和MyISAM的区别是什么? 我: Innodb支持事务 面试官: 还有吗? 我: 我只了解过这一点,其他的...不知道了 面试官: 他们在索引的底层实现上有区别吗? 我: 噢...好像是有,但是我不记得了 面试官: 那Innodb中的索引底层是如何实现的? 我: B+树 面试官: 那为什么B

MySQL5.7升级到8.0过程详解

*爱你&永不变心* 提交于 2020-08-13 15:53:00
前言: 不知不觉,MySQL8.0已经发布好多个GA小版本了。目前互联网上也有很多关于MySQL8.0的内容了,MySQL8.0版本基本已到稳定期,相信很多小伙伴已经在接触8.0了。本篇文章主要介绍从5.7升级到8.0版本的过程及注意事项,有想做版本升级的小伙伴可以参考下。 1.升级前准备及注意事项 首先,我们要大概了解下MySQL5.7和8.0有哪些不同,参考官方文档和其他网友文章,概括总结出MySQL8.0以下几点新特性: 默认字符集由latin1变为utf8mb4。 MyISAM系统表全部换成InnoDB表。 JSON特性增强。 支持不可见索引,支持直方图。 sql_mode参数默认值变化。 默认密码策略变更。 新增角色管理。 支持窗口函数,支持Hash join。 根据版本变化及官方升级教程,列举出以下几点注意事项: 注意字符集设置。为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和比较规则。 密码认证插件变更。为了避免连接问题,可以仍采用5.7的mysql_native_password认证插件。 sql_mode支持问题。8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER。 是否需要手动升级系统表。在MySQL 8.0.16版本之前