MyISAM

MySQL5.7详解安装配置

∥☆過路亽.° 提交于 2020-04-06 15:19:07
MySQL5.7详解安装配置 步骤1:下载安装 可以去mysql的官网下载,也可以直接下载小落上传到CSDN的资源 官网下载地址: https://dev.mysql.com/downloads/installer/ 本博客使用64位免安装版进行演示。 步骤2:解压并配置环境变量 将下载后的安装包解压,C:\Program Files\MySQL\MySQL Server 5.7 配置环境变量,在计算机上点击右键---》属性---》高级系统设置---》环境变量 在环境变量Path中添加: C:\Program Files\MySQL\MySQL Server 5.7\bin; 然后确定保存。 然后进入MySQl的解压缩目录中的bin文件夹,并在其中创建my.ini配置文件。 用记事本打开该文件,并写入如下内容: # MySQL配置 # MySQL配置 [client] # MySQL客户端端口 port=3306 [mysql] # MySQL默认字符集编码 default-character-set=utf8 [mysqld] # MySQL端口 port=3306 # MySQL安装路径 basedir="E:/JAVAStudy/mysql" # MySQL数据库文件路径 datadir="E:/JAVAStudy/mysql/data/" # MySQL数据库默认编码

MyISAM与InnoDB两者之间怎么选择

痴心易碎 提交于 2020-04-06 09:21:47
1、MyISAM不支持事务,InnoDB是事务类型的存储引擎 当我们的表需要用到事务支持的时候,那肯定是不能选择MyISAM了。 2、MyISAM只支持表级锁,BDB支持页级锁和表级锁默认为页级锁,而InnoDB支持行级锁和表级锁默认为行级锁 表级锁:直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许 MyISAM是表级锁定的存储引擎,它不会出现死锁问题 对于write,表锁定原理如下: 如果表上没有锁,在其上面放置一个写锁,否则,把锁定请求放在写锁队列中。 对于read,表锁定原理如下 : 如果表上没有写锁定,那么把一个读锁放在其上面,否则把锁请求放在读锁定队列中 当一个锁定被释放时,表可被写锁定队列中的线程得到,然后才是读锁定队列中的线程。这意味着,如果你在一个表上有许多更新,那么你的SELECT语句将等到所有的写锁定线程执行完。 行级锁:只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的。 行级锁是Mysql粒度最小的一种锁,它能大大的减少数据库操作的冲突,但是粒度越小实现成本也越大。 行 级锁可能会导致“死锁”,那到底是怎么导致的呢,分析原因:Mysql行级锁并不是直接锁记录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条 sql语句操作了主键索引,那么Mysql就会锁定这个主键索引

MyISAM与InnoDB两者之间怎么选择

六月ゝ 毕业季﹏ 提交于 2020-04-06 09:21:30
MyISAM与InnoDB两者之间怎么选择 1、MyISAM不支持事务,InnoDB是事务类型的存储引擎 当我们的表需要用到事务支持的时候,那肯定是不能选择MyISAM了。 2、MyISAM只支持表级锁,BDB支持页级锁和表级锁默认为页级锁,而InnoDB支持行级锁和表级锁默认为行级锁 表级锁:直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许 MyISAM是表级锁定的存储引擎,它不会出现死锁问题 对于write,表锁定原理如下: 如果表上没有锁,在其上面放置一个写锁,否则,把锁定请求放在写锁队列中。 对于read,表锁定原理如下 : 如果表上没有写锁定,那么把一个读锁放在其上面,否则把锁请求放在读锁定队列中 当一个锁定被释放时,表可被写锁定队列中的线程得到,然后才是读锁定队列中的线程。这意味着,如果你在一个表上有许多更新,那么你的SELECT语句将等到所有的写锁定 线程执行完。 行级锁:只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的。 行级锁是Mysql粒度最小的一种锁,它能大大的减少数据库操作的冲突,但是粒度越小实现成本也越大。 行级锁可能会导致“死锁”,那到底是怎么导致的呢,分析原因:Mysql行级锁并不是直接锁记录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条sql语句操作了主 键索引

mysql 的一些知识点

回眸只為那壹抹淺笑 提交于 2020-04-06 06:05:08
单表优化:考虑使用ref(使用了非唯一索引),或range(使用了索引) index 是遍历了索引后进行回表遍历 all 直接查全表 extra不要有using filesort(有第二次查询,一般伴随着order by), 和using where(表示需要进行回表操作) using temporar (已经有表了,但不使用,需要再来一张表,一般伴随着group by) 记住要小表驱动大表 对于左连接一般给左表加索引,对于右外连接一般给右表加索引 using join buffer :使用了连接缓存 索引失效的场景 1,联合索引,跨列 2,在索引列上有函数操作,则索引失效 3,单表查询只会命中一个索引 in和exist的选择,主查询的数据集大,使用in 子查询的数据集大,使用exist using filesort 有两种算法(根据io的次数) 双路排序,第一次扫描排序字段,然后进行排序(在buffer中进行);第二次扫描其他字段(比较消耗性能) 单路排序,一次扫描,然后在buffer中进行排序,不一定是一次io,可能有多次 因为数据量很大的情况,无法一次全部加载到buffer中 如果数据量很打可以调大buffer的大小 如果buffer,太小,则自动将单路切换成双路 参数:max_length_for_sort_data 慢查询会默认会记录超过10的sql 查看慢sql

MySQL count知多少

喜夏-厌秋 提交于 2020-04-06 05:12:56
统计一个表的数据量是经常遇到的需求,但是不同的表设计及不同的写法,统计性能差别会有较大的差异,下面就简单通过实验进行测试( 大家测试的时候注意缓存的情况,否则影响测试结果 )。 1、 准备工作 为了后续测试工作的进行,先准备几张用于测试的表及数据,为了使测试数据具有参考意义,建议测试表的数据量大一点,以免查询时间太小,因此,可以继续使用之前常用的连续数生成大法,如下: /* 创建连续数表 */ CREATE TABLE nums(id INT primary key ); /* 生成连续数的存储过程,优化过后的 */ DELIMITER $$ CREATE PROCEDURE `sp_createNum`(cnt INT ) BEGIN DECLARE i INT DEFAULT 1 ; TRUNCATE TABLE nums; INSERT INTO nums SELECT i; WHILE i < cnt DO BEGIN INSERT INTO nums SELECT id + i FROM nums WHERE id + i <= cnt; SET i = i * 2 ; END ; END WHILE ; END $$ DELIMITER ; 生成数据,本次准备生成1kw条记录 /* 调用存储过程 */ mysql > call sp_createNum(

MySQL各种存储引擎对比

六月ゝ 毕业季﹏ 提交于 2020-04-06 04:04:45
欢迎观看 {无双}(wushuang) 的读书笔记,您可以通过订阅 无双的公众号或微博或头条号 持续关注最新的文章。 头条号ID:1656865998770190 微信公众号:落叶飞翔的蜗牛 开源中国博客: https://my.oschina.net/zhouguanya QQ:3190976240 MySQL数据库区别于其他数据库的最重要的一个特点是其插件式的存储引擎。 MySQL各类存储引擎 InnoDB存储引擎 从MySQL数据库5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。 InnoDB存储引擎支持事务,其设计目标主要是面向在线事务处理(OLTP)的应用。其特点是行锁设计、支持外键,支持类似于Oracle的非锁定读,即默认读取操作不会产生锁。 InnoDB通过使用多版本并发控制MVCC来获取高并发性,并且实现了SQL标准的4种隔离级别,默认为repeatable级别。同时,使用一种称为next-key locking的策略避免幻读现象的产生。除此之外,InnoDB存储引擎还提供了插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用的功能。 对于表中存储的数据,InnoDB存储引擎采用聚集的方式,每张表的存储都是按照主键的顺序进行存放的。如果没有显示的在定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID作为主键。 MyISAM存储引擎

MySQL count知多少

家住魔仙堡 提交于 2020-04-06 04:01:36
统计一个表的数据量是经常遇到的需求,但是不同的表设计及不同的写法,统计性能差别会有较大的差异,下面就简单通过实验进行测试( 大家测试的时候注意缓存的情况,否则影响测试结果 )。 1、 准备工作 为了后续测试工作的进行,先准备几张用于测试的表及数据,为了使测试数据具有参考意义,建议测试表的数据量大一点,以免查询时间太小,因此,可以继续使用之前常用的连续数生成大法,如下: /* 创建连续数表 */ CREATE TABLE nums(id INT primary key ); /* 生成连续数的存储过程,优化过后的 */ DELIMITER $$ CREATE PROCEDURE `sp_createNum`(cnt INT ) BEGIN DECLARE i INT DEFAULT 1 ; TRUNCATE TABLE nums; INSERT INTO nums SELECT i; WHILE i < cnt DO BEGIN INSERT INTO nums SELECT id + i FROM nums WHERE id + i <= cnt; SET i = i * 2 ; END ; END WHILE ; END $$ DELIMITER ; 生成数据,本次准备生成1kw条记录 /* 调用存储过程 */ mysql > call sp_createNum(

《Mysql技术内幕》读书笔记

折月煮酒 提交于 2020-04-05 22:03:23
第一章 MySql存储引擎 1.Innodb存储引擎 支持事务,其特点是行锁设计、支持外键。 Innodb是Mysql默认的存储引擎。 2.MyISAM存储引擎 MyIsam存储引擎不支持事务和表锁设计,Myisam也不支持外键,但是支持全文索引。 第五章 索引与算法 1.常见的索引:B+树索引、全文索引、哈希索引。 2.B+树,是通过二叉查找树,再由平衡二叉树,B树演化而来。 二叉查找树 二叉查找树:左子树的值总是小于根的值,右子树的值总是大于根的值。可以通过中序遍历得到值的排序输出。 平均查找速度比顺序查找来得快。 平衡二叉树(AVL树) 平衡二叉树:首先符合二叉查找树的定义,其次必须满足任何节点的两个子树的高度的最大差为1。 B+树 B+树:是为磁盘或其他直接存取辅助设备设计的一种平衡树。 在B+树中,所有记录节点都是按键值对的大小顺序存放在同一层的叶子节点上,由各叶子节点指针进行连接。 优点 :B+树的高度一般都在2--4层。也就是查找某一键值的行记录时最多只需要2--4次IO就可以了。 B+树索引 B+树索引,分为聚集索引和辅助索引。 聚集索引和辅助索引的区别:叶子节点存放的是否是一整行的信息。 聚集索引 聚集索引:就是按照每张表的主键构造一颗B+树,同时叶子节点存放的即为整张表的行记录数据,也将聚集索引的叶子节点称为数据页。 辅助索引 辅助索引

MySQL count知多少

旧巷老猫 提交于 2020-04-05 16:51:11
统计一个表的数据量是经常遇到的需求,但是不同的表设计及不同的写法,统计性能差别会有较大的差异,下面就简单通过实验进行测试( 大家测试的时候注意缓存的情况,否则影响测试结果 )。 1、 准备工作 为了后续测试工作的进行,先准备几张用于测试的表及数据,为了使测试数据具有参考意义,建议测试表的数据量大一点,以免查询时间太小,因此,可以继续使用之前常用的连续数生成大法,如下: /* 创建连续数表 */ CREATE TABLE nums(id INT primary key); /* 生成连续数的存储过程,优化过后的 */ DELIMITER $$ CREATE PROCEDURE `sp_createNum`(cnt INT ) BEGIN DECLARE i INT DEFAULT 1; TRUNCATE TABLE nums; INSERT INTO nums SELECT i; WHILE i < cnt DO BEGIN INSERT INTO nums SELECT id + i FROM nums WHERE id + i<=cnt; SET i = i*2; END; END WHILE; END$$ DELIMITER ; 生成数据,本次准备生成1kw条记录 /* 调用存储过程 */ mysql> call sp_createNum(10000000); Query OK

MySQL 21道高频面试题及其解析

醉酒当歌 提交于 2020-04-05 15:02:30
Q1:MySQL主要有哪些存储引擎,分别适合哪些应用场景? 答:主要有①MyISAM,是5.5版本之前的默认存储引擎,支持表级锁,不支持事务和外键,并发效率较低,读取数据快,更新数据慢。适合以读操作为主,并且对并发性要求较低的应用。②InnoDB,MySQL目前的默认存储引擎,支持行级锁、事务和外键,并发效率好。适合对事务的完整性和并发性、数据的准确性要求比较高,增删操作多的应用。③Memory,所有的数据都保存在内存中,访问速度快,一旦服务关闭数据将丢失。适合更新不太频繁的数据量小的表用来快速得到访问结果。④Archive、Federated等。 Q2:索引是什么? 答:MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 Q3:索引的优缺点有哪些? 答:①优势:提高数据检索的效率,降低数据库的IO成本。通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。②劣势:实际上索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所以索引列也是要占用空间的。 虽然索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE