MyISAM

MySQL索引分类

杀马特。学长 韩版系。学妹 提交于 2020-10-09 00:30:45
1、普通索引 即不应用任何限制条件的索引,该索引可以在任何数据类型中创建。字段本身的约束条件可以判断其值是否为空或唯一。 2、唯一索引: 不允许其中任何两行具有相同索引值的索引。 3、主键索引: 在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。 4、聚集索引: 表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。聚集索引通常提供更快的数据访问速度。 5、全文索引 使用FULLTEXT参数可以设置全文索引。全文索引只能创建在CHAR、VARCHAR、TEXT类型的字段上。查询数据量较大的字符串类型字段时,使用全文索引可以提高查询速度。注意:全文索引在默认情况下是对大小写字母不敏感的,可以通过使用二进制对索引的列进行排序以执行大小写敏感的全文索引。MySQL中只有MyISAM存储引擎支持全文索引 6、单列索引 顾名思义,单列索引值对应一个字段的索引。可以包括上述的三种索引方式。应用该索引的条件只需要保证该索引值对应一个字段即可。 7、多列索引 多列索引是在表的多个字段上创建一个索引。该索引只想创建时对应的多个字段,可以通过这几个字段进行查询。要想应用该索引,用户必须使用这些字段中的第一个字段。 8、空间索引 使用SPATIAL参数可以设置控件索引

四万字的 MySQL 详细入门学习(附带练习题)

核能气质少年 提交于 2020-10-07 10:41:54
写在前面:本博客是根据动力节点课程所写的笔记,原视频链接: https://www.bilibili.com/video/BV1fx411X7BD?p=1 关于这篇博客,可能内容比较基础,很多细节的东西没讲到,后面我还会继续跟进这篇博客,做好修改。 目录 一、数据库简介 二、安装MySQL 三、DB、DBMS、SQL的关系 四、表 五、SQL语句的分类 六、导入初始化数据 七、查看表结构以及表中的数据 八、MySQL的常用命令 九、查询简介及简单查询 十、条件查询 十一、排序查询 十二、分组查询 十三、去重查询 十四、连接查询 十五、子查询 十六、联表查询 十七、分页查询 十八、表的创建 十九、插入数据 二十、修改数据 二十一、删除数据 二十二、修改表结构 二十三、约束 二十四、存储引擎 二十五、事务 二十六、索引 二十七、视图 二十八、数据库的导入导出 二十九、设计三范式 三十、作业题 一、数据库简介 回到目录 在学习数据库之前,我们回忆一下在IO流中所学习的一个序列化流和反序列化流,可以向文件中存入对象,也可以从文件中取出对象,这无疑是存储和取出数据的一种形式。 我们学习数据库,也是为了操作数据,其包括对数据的增加、删除、修改、和查询,那你就会问了,既然二者功能相同,那为什么不能直接用序列化流呢? 那肯定是因为【数据库管理系统】来操作数据更加简单啊

Mysql表修复

我们两清 提交于 2020-10-07 04:01:40
mysqlcheck mysqlcheck客户端可以检查和修复MyISAM表。它还可以优化和分析表。mysqlcheck的功能类似myisamchk,但其工作不同。 主要差别是当mysqld服务器在运行时必须使用mysqlcheck,而myisamchk应用于服务器没有运行时。使用mysqlcheck的好处是不需要停止服务器来检查或修复表。 mysqlcheck为用户提供了一种方便的使用SQL语句CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABLE的方式。它确定在要执行的操作中使用使用哪个语句,然后将语句发送到要执行的服务器上。 示例 mysqlcheck -B 指定数据库 -r -S /data/mysql2/mysql2.sock -u root -p'test' >> /var/log/mysqlcheck.log 常用选项 --optimize,-o 优化表 -h 主机地 -P 端口号 -F 只检查没有正确关闭的表 -r 执行可以修复大部分问题的修复,只是唯一值不唯一时不能修复。 -a 分析表 -c 检查表,默认选项 -m 中等的检查 -e 完全检查,很慢 --database,-B 指定库 如果没指定,表示全部库 --all--database,-A 所有库 --fast,-F 只检查没有正确关闭的表。 --quick

MYSQL8在Ubuntu 18.04.3安装,索引,性能分析基本介绍

不问归期 提交于 2020-10-07 00:57:56
MYSQL MYSQL架构介绍 MYSQL简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。 MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这就增加速度并提高了灵活性。 MYSQL安装 安装 在 Ubuntu 18.04.3下安装mysql8 wget https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb sudo dpkg -i mysql-apt-config_0.8.15-1_all.deb sudo apt install mysql-server mysql -u root -p select host, user, authentication_string, plugin from mysql.user; MYSQL用户与权限管理 MYSQL用户管理 1.创建用户 创建hb用户,密码123 create user 'hbx'@'%' identified with mysql_native_password by '123'; 创建hb用户,ip:192.118.1.1,密码123 create user 'hb'@'192.118.1.1' identified by '123'; 创建ip:192

MySQL

家住魔仙堡 提交于 2020-10-06 06:53:23
一、MySQL 性能优化的维度 硬件: CPU、内存、存储、网络设备等 系统配置: 服务器系统、数据库服务参数等 数据库表结构: 高可用、分库分表、读写分离、存储引擎、表设计等 SQL 及 索引: SQL 语句优化、索引使用等 二、查询优化 1. 慢查询 慢查询开启日志 慢查询分析 2. Explain 帮助开发人员分析 SQL 问题 id:查询序列号 select_type:表示查询的类型 simple:简单的查询 primary:最外面的select union: dependent union: union result :union 的结果 subquery:子查询的第一个select dependent subquery:子查询的第一个select,取决于外面的查询 derived:导出表的 select table:查询数据是关于哪张表 type:区间索引,显示连接用了何种类型,最好到最差的连接类型(至少达到range,最后达到 ref) system const:数据表最多只有一个匹配行,因为只匹配一行数据,所以很快 eq_ref:使用=比较带索引的列 ref:可用于 = 或 < 或 > 操作符的带索引的列 ref_or_null index_merge unique_subquery index_subquery range:只检索给定范围的行,使用一个索引来选择行

Mysql通过Merge引擎进行分表

≯℡__Kan透↙ 提交于 2020-10-06 02:24:35
Mysql通过Merge引擎进行分表 使用场景 数据表记录很大,单表记录会超过1000W,比如用户表等。 测试环境 Mysql5.7 注意 分表的id不能是自增(auto increment)的; 分表必须使用MyISAM存储引擎; 每个分表的表结构必须相同; MySQL必须具有存储分表数据文件和索引文件的目录的读写权限; 必须启用MySQL的符号链接支持功能。 总表的表结构必须与各个分表相同; 总表必须使用MRG_MyISAM存储引擎; 总表不会创建任何数据文件和索引文件; MRG文件存储总表需要映射的子表的表名; 总表本身不存储任何数据和索引; INSERT_METHOD需要设置为NO,或者不配置; 总表的id不能是自增(auto increment)的。 MERGE分表的优点 适用于存储日志数据。例如,可以将不同月份的数据存入不同的表,然后使用myisampack工具压缩数据,最后通过一张MERGE表来查询这些数据。 可以获得更快的速度。可以根据某种指标,将一张只读的大表分割成若干张小表,然后将这些小表分别放在不同的磁盘上存储。当需要读取数据时,MERGE表可以将这些小表的数据组织起来,就好像使用先前的大表一样,但是速度会快很多。 可以提高搜索效率。可以根据某种指标将一张只读的大数据表分割为若干个小表,然后根据不同的查询维度,可以得到若干种小表的组合

mysql执行过程以及顺序

你说的曾经没有我的故事 提交于 2020-10-05 17:53:57
前言:mysql在我们的开发中基本每天都要面对的,作为开发中的数据的来源,mysql承担者存储数据和读写数据的职责。因为学习和了解mysql是至关重要的,那么当我们在客户端发起一个sql到出现详细的查询数据,这其中究竟经历了什么样的过程?mysql服务端是如何处理请求的,又是如何执行sql语句的?本篇博客将来探讨这个问题: 本篇博客的目录 一:mysql执行过程 二:mysql执行过程中的状态 三:mysql执行的顺序 四:总结 一:mysql执行过程 mysql整体的执行过程如下图所示: 1.1:连接器 连接器的主要职责就是: ①负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行,其中mysql在与客户端连接TCP/IP的 ②验证请求用户的账户和密码是否正确,如果账户和密码错误,会报错:Access denied for user 'root'@'localhost' (using password: YES) ③如果用户的账户和密码验证通过,会在mysql自带的权限表中查询当前用户的权限: mysql中存在4个控制权限的表, 分别为 user表,db表,tables_priv表,columns_priv表 , mysql权限表的验证过程为: 1: User表 : 存放用户账户信息以及全局级别(所有数据库

MySQL读取数据时发生了什么?数据读取过程分析[图]

依然范特西╮ 提交于 2020-10-05 06:32:11
上一篇我们说到B+树拼接一己之力杀出重围,最后成为了InnoDB和MyISAM这两种存储引擎的索引实现。我们都知道索引心里是有B+树的,他知道自己不可能全部存储在内存中,他一般是以「索引文件的形式存储的磁盘上」。那么MySQL读取数据时都发生了什么呢?这得从内存开始说起。 IRAM与ROM ROM,Read-OnlyMemory:只读储存器,可以理解为电脑的硬盘上存放操作系统的软件,手机的内置储存上存放操作系统的软件,单片机的Flash上存放操作系统的软件。总之就是用来存储操作系统的软件。 RAM,Random-AccessMemory:随机储存器,可以理解为电脑的内存条。用于存放动态数据,也叫运行内存。系统运行的时候,需要把操作系统从ROM中读取出来,放在RAM中运行。 CPU要运行程序需要从ROM调取,但ROM又有距离,所以需要用RAM来做一个连接。 I主存存储原理 RAM主要的作用就是存储代码和数据供CPU在需要的时候调用,但是这些数据并不是像用碗盛饭那么简单,我们是需要知道数据的特定位置信息。他更像是图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM等存储器来说也是一样的,虽然存储的都是代表0和1的代码,但是不同的组合就是不同的数据。 抽象地看,主存是一系列的存储单元组成的矩阵

01MySQL内核分析-The Skeleton of the Server Code

徘徊边缘 提交于 2020-10-02 23:56:45
摘要 这个官方文档一段对MySQL内核分析的一个向导。是对MySQL一条insert语句写入到MySQL数据库的分析。 但是,对于MySQL 5.7版本来说,基本上都是写入到innodb引擎。但也还是有借鉴意义,大的框架没有太大变化。 后面的文档,会通过mysqld --debug 和 gdb 等工具,通过分析mysqld.trace来分析insert语句在MySQL 5.7中怎么写入数据库。 官方文档给出的一段结构,如下: /sql/mysqld.cc /sql/sql_parse.cc /sql/sql_prepare.cc /sql/sql_insert.cc /sql/ha_myisam.cc /myisam/mi_write.c 上述梳理一个过程,是说从客户段执行一条简单的insert语句,然后到达MySQL服务器端,并通过MyISAM存储层。写入到MyISAM文件的过程。 由于,我们现在的主流都是InnoDB存储引擎,所以我们分析的写入到存储层应该是InnoDB的源代码。但是上述的一个框架也有借鉴意义。虽然,走的是InnoDB存储引擎插入数据,但是也还是需要通过SQL层的ha_*这样的接口进行接入。 正题开始!!!!!!!!!!!!!!!!!!!!!!! 第一步,进入MySQL大门的地方。梦开始的地方。众所周知,C语言都是需要main方法作为主入口

详解聚簇索引

こ雲淡風輕ζ 提交于 2020-10-02 16:09:46
一、聚族索引的构造 聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。具体的细节依赖于其实现方式,但InnoDB的聚族索引实际上在同一个结构中保存了B-Tree索引和数据行。当表有聚族索引时,它的数据行存放在索引的叶子页中。术语“聚族”表示数据行和相邻的键值紧凑的存储在一起。因为无法同时把数据行放在两个不同的地方,所以一个表只能有一个聚族索引。 因为是存储引擎负责实现索引,因此不是所有的存储引擎都支持聚族索引。这里我们主要关注InnoDB,但是这里讨论的原理对于任何支持聚族索引的存储引擎都是适用的。 下面展示了聚族索引中的记录是如何存放的。注意到,叶子页包含了行的全部数据,但是节点页只包含了索引列。 在InnoDB中通过主键聚集数据,这也就是说上图中“被索引的列”就是主键列。如果没有定义主键,InnoDB会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB会隐式定义一个主键来作为聚族索引。InnoDB只聚集在同一个页面中的记录。包含相邻键的页面可能会相距甚远。 聚族主键可能对性能有帮助,但也可能导致严重的性能问题。所以需要仔细的考虑聚族索引,尤其是将表的引擎从InnoDB改成其他引擎的时候。 二、聚族索引的优点 可以把相关数据保存在一起。例如实现电子邮件时,可以根据用户ID来聚集数据,这样只需要从磁盘读取少数的数据页就能获取某个用户的全部邮件。如果没有使用聚族索引