随笔分类 - 数据库
摘要:自增ID的问题 可靠性不高 存在自增ID回溯的问题,这个问题直到最新版本的MySQL8.0才修复。 安全性不高 对外暴露的接口可以非常容易猜测对应的信息。比如:/User/1/这样的接口,可以非常容易猜测用户ID的值为多少,总用户数量有多少,也可以非常容易地通过接口进行数据的爬取。 性能差 自增ID
        阅读全文
            
摘要:EXISTS和IN的区分 # 大表A驱动小表cc时用in;即当A表的数据量大于B表的数据量时 SELECT * FROM A WHERE cc IN (SELECT CC FROM B); # 当A表的数据量小于B表的数据量时 # 小表A驱动大表cc时用EXISTS ,因为执行时每次是从A中取一条数
        阅读全文
            
摘要:简介 Index Condition Pushdown(ICP)是MySQL5.6中新特性,是一种在存储擎层使用索引过滤数据的优化方式。 从二级索引中查找数据,如果二级索引中已经有了要筛选的列,但是又不能使用索引,会先从该二级索引筛选完以后再回表。 好处:ICP可以减少存储引擎必须访问基表的次数和M
        阅读全文
            
摘要:简介 索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据; 当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了满足查询结果的数据就叫做覆盖索引。 非聚簇复合索引的一种形式,它包括在查询里的SELEC
        阅读全文
            
摘要:GROUP BY优化 1、group by使用索引的原则几乎跟order by一致,group by即使没有过滤条件用到索引,也可以直接使用索引。 2、group by先排序再分组,遵照索引建的最佳左前缀法则 3、当无法使用索引列,增大max_length_for_sort_data和sort_bu
        阅读全文
            
摘要:子查询 子查询是 MySQL 的一项重要的功能,可以帮助我们通过一个 SQL 语句实现比较复杂的查询。但是,子查询的执行效率不高 ① 执行子查询时,MySQL需要为内层查询语句的查询结果 建立一个临时表 ,然后外层查询语句从临时表 中查询记录。查询完毕后,再 撤销这些临时表 。这样会消耗过多的CPU
        阅读全文
            
摘要:Simple Nested-Loop Join(简单嵌套循环连接) 从表A中取出一条数据1,遍历表B,将匹配到的数据放到result…以此类推,驱动表A中的每一条记录与被驱动表B的记录进行判断 Index Nested-Loop Join(索引嵌套循环连接) Index Nested-Loop Jo
        阅读全文
            
摘要:左外连接 # 创建分类表 CREATE TABLE IF NOT EXISTS `type` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`id`) )
        阅读全文
            
摘要:数据准备 # 创建数据库 CREATE DATABASE atguigudb2; USE atguigudb2; # 创建表 CREATE TABLE `class` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `className` VARCHAR(30) DE
        阅读全文
            
摘要:使用格式 EXPLAIN SELECT select_options 或者 DESCRIBE SELECT select_options EXPLAIN 语句输出的各个列的作用 代码案例 # 创建表 CREATE TABLE s1 ( id INT AUTO_INCREMENT, key1 VARC
        阅读全文
            
摘要:EXPLAIN四种输出格式 传统格式、JSON格式、TREE格式、可视化输出 输出传统格式 EXPLAIN SELECT s1.key1, s2.key1 FROM s1 LEFT JOIN s2 ON s1.key1 = s2.key1 WHERE s2.common_field IS NOT N
        阅读全文
            
摘要:查看系统性能参数 SHOW [GLOBAL|SESSION] STATUS LIKE '参数'; Connections:连接MySQL服务器的次数。 Uptime:MySQL服务器的上线时间。 Slow_queries:慢查询的次数。 Innodb_rows_read:Select查询返回的行数 
        阅读全文
            
摘要:创建数据库、表 CREATE DATABASE atguigudb1; USE atguigudb1; # 1.创建学生表和课程表 CREATE TABLE `student_info` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `student_id` INT
        阅读全文
            
摘要:起步 步骤 页的概念 页的大小默认为16k 以页作为磁盘和内存之间交互的基本单位,也就是一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。也就是说,在数据库中,不论读一行,还是读多行, 都是将这些行所在的页进行加载。也就是说,数据库管理存储空间的基本单位是页(P
        阅读全文
            
摘要:起步 页的概念 页的大小默认为16k 以页作为磁盘和内存之间交互的基本单位,也就是一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。也就是说,在数据库中,不论读一行,还是读多行, 都是将这些行所在的页进行加载。也就是说,数据库管理存储空间的基本单位是页(Page
        阅读全文
            
摘要:大纲 指定行格式的语法 在创建或修改表的语句中指定行格式: CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称 ALTER TABLE 表名 ROW_FORMAT=行格式名称 举例: mysql> CREATE TABLE record_test_table ( -> c
        阅读全文
            
摘要:常见索引 聚簇索引 聚簇索引并不是一种单独的索引类型,而是一种数据存储方式(所有的用户记录都存储在了叶子节点),也就是所谓的索引即数据,数据即索引 其他特点 特点: 1. 使用记录主键值的大小进行记录和页的排序,这包括三个方面的含义: 页内的记录是按照主键的大小顺序排成一个单向链表 各个存放用户记录
        阅读全文
            
摘要:起步 B树索引适用存储引擎 即使多个存储引擎支持同一种类型的索引,但是他们的实现原理也是不同的。 Innodb和MyISAM默认的索引是Btree索引;而Memory默认的索引是Hash索引。 MyISAM引擎使用 B+Tree 作为索引结构,叶子节点的data域存放的是 数据记录的地址 MyISA
        阅读全文
            
摘要:简介 全表遍历 Hash结构 二叉搜索树 AVL树 B-Tree B+Tree R树 Hash结构 上图中哈希函数h有可能将两个不同的关键字映射到相同的位置,这叫做 碰撞 ,在数据库中一般采用 链接法 来解决。 在链接法中,将散列到同一槽位的元素放在一个链表中 Hash索引适用存储引擎 为了减少IO
        阅读全文
            
摘要:持降序索引 在MySQL5.7和MySQL8.0中创建表 CREATE TABLE ts1(a int,b int,index idx_a_b(a,b desc)); # 在MySQL5.7中查看表结构 show create table ts1\G # 索引仍然是默认的升序 # 在MySQL8.0
        阅读全文
            
浙公网安备 33010602011771号