
mysql
该专栏主要介绍关系型数据库的基础知识
程序猿之家
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
mysql如何部分解决幻读
两次范围查找不一致快照读部分解决了幻读的问题,、插入会有幻读的情况发生,示例如下:#表结构和数据CREATE TABLE `locktest` ( `id` int(11) NOT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO `locktest` (`id`, `age`) VALUES (3, 3);INSERT IN原创 2021-11-11 20:47:29 · 720 阅读 · 0 评论 -
MVCC如何实现的
行记录版本+undolog实现MVCCtrx_id: 操作这个数据事务 ID ,也就是最后一个对数据插入或者更新的事务 ID 。**roll_ptr:**回滚指针,指向这个记录的 Undo Log 信息。update和insert时,会将当前事物的id(递增)赋值给行的事物IDdelete时,会将当前的事物ID赋值给删除字段select时,会选择trx_id小于当前事物并且删除id大于当前事物的行,可以通过回滚指针进行遍历...原创 2021-11-11 20:46:32 · 303 阅读 · 0 评论 -
怎么给字符串加索引
1.直接创建完整索引,这样可能比较占用空间;2.创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引(即使一个字符串的长度小于前缀索引长度,也需要进行回表判断);3.倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题,不支持范围查找;4.创建 hash 字段索引,查询性能稳定,有额外的存储和计算消耗,不支持范围扫描。倒序索引和hash字段索引的区别1.从占用的额外空间来看,倒序存储方式不会消耗额外的存储空间,而 hash 字段方法需要增加一个字段。当然,倒序存储方式使原创 2021-11-11 20:44:21 · 956 阅读 · 0 评论 -
mysql为什么会选错索引
**优化器的逻辑:**根据扫描行数、是否回表、使用临时表、使用排序等进行综合判断**扫描行数怎么判断:**根据索引区分度进行评估,我们称之为基数(cardinality):一个索引上不同值的个数**cardinality怎么获得:**采样统计,变更了一定行数的数据会自动更新(analyze table t,重新统计索引信息)索引选错了怎么办:采用 force index 强行选择一个索引(一般不用,索引名字改了程序也得改)我们可以考虑修改语句,引导 MySQL 使用我们期望的索引新建一个更合适原创 2021-11-11 20:43:03 · 364 阅读 · 0 评论 -
唯一索引和普通索引如何抉择
查询过程:select id from T where k=5(k上有索引)* 普通索引,查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录,直到碰到第一个不满足 k=5 条件的记录。* 唯一索引,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。他们之间的性能差异几乎可忽略,因为查询都是以页为单位读取到内存筛选。更新过程changebuffer的使用,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,将这些更新操作缓存在 change..原创 2021-11-11 20:42:30 · 327 阅读 · 0 评论 -
什么叫联合索引的最左匹配原则
联合索引就是多个字段共同构成一个索引,如果创建了索引(A,B,C),则相当于创建了(A)、(A,B)、(A,B,C)三个索引,原因是因为联合索引存储时,是先根据A的大小排序,然后再根据B的大小排序,最后根据C的大小排序,其存储结构可以参考入下图。优势:索引列越多,筛选出的数据越少;一个索引顶多个索引;覆盖索引减少回表注意事项:最左匹配,最常用的放最左边存储结构:...原创 2021-11-11 20:40:53 · 374 阅读 · 0 评论 -
B+树索引是如何实现的
1. B+树结构聚簇索引非聚簇索引B+树索引并不能找到一个给定键值的具体行。B+树索引能找到的只是被查找数据行所在的页。然后数据库通过把页读入到内存,再进行查找2. 哈希索引h(k) = k mod m,m的取值为略大于缓冲次页数量两倍的质数冲突解决方式:链接法自适应哈希索引经哈希函数映射到一个哈希表中,因此对千字典类型的查找非常快速,但是对于范围查找就无能为力了3. 全文索引全文检索通常使用倒排索引(inverted index) 来实现,也就是通过单词找句子,而不是通过句子原创 2021-11-11 20:32:29 · 945 阅读 · 0 评论 -
mysql三层架构
一.mysql架构1.Server层1.1连接池连接器主要负责客户端连接的权限校验、建立连接并且维持连接。我们最常用的TCP/IP形式的连接。mysql -h ip -P port -u user -p #数据库连接show processlist #查看数据库当前所有的连接当客户端发起数据库连接时,连接层会查mysql.user表,对连接进行用户名和密码认证。如果用户名密码认证通过,连接器会到权限(mysql.user)里面查出你拥有的权限。之后,这个连接里面的权限原创 2021-11-11 20:29:20 · 2527 阅读 · 2 评论