数据库
文章平均质量分 83
swadian2008
不积跬步,无以至千里;不积小流,无以成江海
展开
-
【索引】数据库索引之散列索引
顺序文件组织的一个缺点是我们必须访问索引结构来定位数据,或者必须使用二分法搜索,这将导致过多的 I/O 操作。基于散列(hashing)技术的文件组织使我们能够避免访问索引结构。//使用散列可以减少查找的次数。所谓散列,其实就是键值对的映射,而映射效果由散列函数决定在散列中,散列桶(bucket)用来表示能存储一条或多条记录的一个存储单位。通常一个桶就是一个磁盘块,但也可能小于或大于一个磁盘块。原创 2024-06-27 20:01:52 · 834 阅读 · 0 评论 -
【索引】数据库索引之顺序索引
聚簇索引的数据和索引存储在一个文件中, 它的叶子节点包含实际的数据记录本身,而不是指向数据记录的指针。这不同于非聚簇索引,非聚簇索引的叶子节点包含指向数据记录位置的指针。原创 2024-06-19 16:24:34 · 1191 阅读 · 0 评论 -
MYSQL8.0 WITH RECURSIVE递归查询
all 上方),第二部分是递归部分(union all下方)。递归部分第一次进入的时候使用非递归部分传递过来的参数,也就是第一行的数据值,进而得到第二行数据值,然后根据第二行数据值得到第三行数据值。如果想将拼接的数据转换成字符串,可以在 array_agg() 的基础上使用 array_to_string() 方法。postgre 中的 array_agg(字段) 等价于mysql 中的 group_concat(字段)。定义下面这样的表,存储每个区域(省、市、区)的 id,名字及上级区域的 pid。原创 2022-09-06 21:28:27 · 5645 阅读 · 1 评论 -
自增主键冲突
主键冲突异常,具体的导致原因则是 postgresql 每次插入数据时使用缓存,而不会重新确认自增主键的取值。这就导致某些情况下插入数据(例如SQL语句中指定了ID)不会更新这个自增主键下一个取值的缓存,进而在下次插入时触发错误。postgresql 插入数据时主键冲突异常。重置序列对象的计数器数值。原创 2022-08-22 11:38:36 · 1430 阅读 · 0 评论 -
Mysql数据类型选择
目录1、数值类型2、日期和时间3、字符串4、关于int(n),n为显示宽度问题在MySQL中,选择正确的数据类型,对于性能至关重要。一般应该遵循下面两步:(1)确定合适的大类型:数字、字符串、时间、二进制;(2)确定具体的类型:有无符号、取值范围、变长定长等。在MySQL数据类型设置方面,尽量用更小的数据类型,因为它们通常有更好的性能,花费更少的硬件资源。并且,尽量把字段定义为NOT NULL,避免使用NULL。1、数值类型 类型 大小原创 2022-05-07 10:11:25 · 704 阅读 · 0 评论 -
分页查询、关联查询、in/exists和count优化
目录1、分页查询优化(1)根据自增且连续的主键排序的分页查询优化(2)根据非主键字段排序的分页查询优化2、关联查询优化(1)嵌套循环连接 Nested-Loop Join(NLJ) 算法(关联字段有索引)(2)基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法(关联字段无索引)(3)对于关联 sql 的优化3、in和exists优化4、count(*)查询优化1、分页查询优化// 'employees' 建表结构同《Mysql exp原创 2022-04-16 17:07:34 · 1087 阅读 · 0 评论 -
MySQL索引的设计原则
目录1. 选择唯一性索引2. 为经常需要排序、分组和联合操作的字段建立索引3. 为常作为查询条件的字段建立索引4. 限制索引的数目5. 尽量使用数据量少的索引6. 数据量小的表最好不要使用索引7. 尽量使用前缀来索引8. 删除不再使用或者很少使用的索引9. 代码现行,索引后上10. where 与 Order by 冲突时优先 where11. 基于慢查询做优化索引的设计可以遵循一些已有的原则,创建索引的时候应尽量考虑符合这些原则,便于提升索引的使用效率,更高原创 2022-05-07 10:10:31 · 2122 阅读 · 0 评论 -
Mysql如何选择合适的索引-trace工具分析
// 以下建表结构和数据同《Mysql explain 索引优化案例》执行如下sqlEXPLAIN select * from employees where name > 'a';为什么明明建立了索引,而且也有索引可用,但是Mysql为什么最终选择了全表扫描呢?原因:用name索引需要遍历name字段联合索引树,然后还需要根据遍历出来的主键值去主键索引树再去查出最终数据(回表),经过Mysql底层分析,成本比全表扫描还要高,因此选择了全表扫描。可以用覆盖索引优化,这样只需要原创 2022-04-15 14:18:06 · 348 阅读 · 0 评论 -
Mysql索引下推、Order by优化和Using filesort文件排序原理
目录1、like 'KK%' 和索引下推2、Order by 和 Group by 优化3、Using filesort文件排序原理// 以下建表结构和数据同《Mysql explain 索引优化案例》1、like 'KK%' 和索引下推like 'KK%'一般情况都会走索引,原因是like 'KK%' 用到了索引下推优化EXPLAIN SELECT * FROM employees WHERE name like 'LiLei%' AND age = 22 AND posi.原创 2022-04-15 11:36:48 · 1882 阅读 · 0 评论 -
Mysql索引的优化原则
目录1、全值匹配和key_len长度计算2、最左前缀匹配原则3、避免在索引列上计算4、存储引擎不能使用索引中范围条件右边的列5、索引列尽量包含查询列6、mysql在使用不等于,not in ,not exists 的时候无法使用索引7、is null,is not null 一般情况下也无法使用索引8、like以通配符开头('%abc...')mysql索引失效会变成全表扫描操作9、字段类型装换导致索引失效10、少用or或in进行查询11、索引使用总结案例前准原创 2022-04-14 15:54:18 · 972 阅读 · 0 评论 -
mysql5.7的安装与配置(centos7环境)
目录第一步:下载mysql第二步:解压文件第三步:配置启动文件第四步:使用专门用户初始化 mysql 的数据库第五步:进入客户端第六步:设置远程访问第七步:设置开机自启动第一步:下载mysqlmysql社区版官网下载:MySQL :: Download MySQL Community Server (Archived Versions)mysql安装检查1、使用whereis命令(安装包方式),如果安装了mysql,会显示文件安装的地址whereis my原创 2022-04-13 19:10:49 · 1030 阅读 · 0 评论 -
Innodb引擎SQL执行的BufferPool缓存机制
目录为什么Mysql不直接更新磁盘上的数据?Innodb引擎SQL执行的BufferPool缓存机制为什么Mysql不直接更新磁盘上的数据?如果一个请求对磁盘文件进行随机读写,直接更新磁盘文件里的数据,会使数据库性能变得很差。因为磁盘随机读写的性能通常都非常的差,直接更新磁盘文件会使数据库抗并发能力大幅下降。 Mysql BufferPool 缓存机制,可以保证每个更新请求都是更新内存 BufferPool,然后顺序写日志文件,同时还能保证各种异常情况下的数据一致性。更新内存的性能是原创 2022-04-13 15:02:49 · 777 阅读 · 0 评论 -
Explain工具分析
目录select_type列table列type列possible_keys列、key列、key_len列、ref列mysql的安装:mysql5.7的安装与配置(centos7环境)_希若的博客-CSDN博客_mysql5.7环境配置使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析查询语句或是结构的性能瓶颈。在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL。注意:如果 f原创 2022-04-09 22:13:55 · 898 阅读 · 0 评论 -
MVCC 多版本并发控制机制
目录undo日志版本链一致性视图read-view和版本链比对规则Mysql在可重复读隔离级别下如何保证事务较高的隔离性,同样的sql查询语句在一个事务里多次执行查询结果相同,就算其它事务对数据有修改也不会影响当前事务sql语句的查询结果。这个隔离性就是靠MVCC(Multi-Version Concurrency Control)机制来保证的,对一行数据的读和写两个操作默认是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥,而在串行化隔离级别为了保证较高的隔离性是通过将所有操作加锁互斥来实原创 2022-04-09 11:25:19 · 110 阅读 · 0 评论 -
数据库锁机制
目录1、表锁和行锁2、间隙锁(Gap Lock)和临键锁(Next-key Locks)3、锁机制分析数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了事务隔离机制、锁机制、MVCC多版本并发控制隔离机制,用一整套机制来解决多事务并发问题。锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计原创 2022-04-04 21:17:50 · 4074 阅读 · 0 评论 -
索引数据结构
目录1、二叉树2、红黑树3、hash表4、B树(B+树)5、MySQL中的数据库索引具备充当索引的数据结构有以下几种:二叉树、红黑树、hash表、B树(B+树)。而我们数据库最终使用的是B+树(B+树的改进,叶子节点间添加了双向指针,便于范围查找)。数据结构可视化网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html1、二叉树二叉树特点是每个节点最多只能有两棵子树,且有左右之分。如果是顺序的.原创 2022-04-03 16:18:19 · 3945 阅读 · 0 评论 -
聚簇索引和非聚簇索引
目录聚簇索引(聚集索引)聚簇索引的优缺点辅助索引(非聚簇索引)InnoDB索引实现主键索引InnoDB的辅助索引MyISAM索引实现主键索引辅助索引(Secondary key)聚簇索引并不是一种单独的索引类型,而是一种数据存储方式,具体细节依赖于其实现方式。B+树索引可以分为聚簇索引(也称聚集索引,clustered index)和辅助索引(有时也称非聚簇索引或二级索引,secondary index,non-clustered index)。这两种索引内部都是原创 2021-09-02 16:18:05 · 203 阅读 · 0 评论 -
B-tree和B+tree详解
目录二叉查找树平衡二叉树(AVL Tree)平衡多路查找树(B-Tree)B+TreeB+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。二叉查找树二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的原创 2021-09-02 16:25:02 · 358 阅读 · 0 评论 -
Mysql存储结构-页的概念
目录一、Innodb中页的概念1、page头部2、记录在页中的存储二、页内记录维护的顺序保证1、逻辑有序和物理有序2、槽管理mysql数据库的数据存储结构是通过表空间(table space)->段(segment)->区(或者簇extends)->页(page)进行管理。一、Innodb中页的概念页,是InnoDB中数据管理的最小单位。当我们查询数据时,其是以页为单位,将磁盘中的数据加载到缓冲池中的。同理,更新数据也是以页为单位,将我们对数据的修改刷.原创 2021-08-31 18:47:33 · 2892 阅读 · 0 评论 -
MySQL数据库索引和索引原理
一、介绍1.什么是索引?一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。2.为什么要有索引呢?索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引优化应该是对查询性能优化最有效的手段了。索引能够轻原创 2021-07-22 15:52:54 · 142 阅读 · 0 评论 -
MySQL数据库隔离级别
目录一、SQL语言二、数据库事务三、隔离级别1、读未提交——>脏读2、读已提交——>不可重复读3、可重复读 ——>幻读4、Serializable - 串行化一、SQL语言SQL数据库承担了各种应用程序的核心数据存储,而NoSQL数据库作为SQL数据库的补充,两者不再是二选一的问题,而是主从关系。SQL语言定义了这么几种操作数据库的能力:DDL:Data Definition LanguageDDL允许用户定义数据,也就是创建表、删除表、修.原创 2020-05-12 11:12:43 · 389 阅读 · 0 评论 -
【索引】数据库索引之覆盖索引
那么查询时,索引能快速找到所有 Department 为 Sales 的记录,但仍需要访问表中的数据页来获取 EmployeeID,FirstName,LastName。查询时,所有所需字段都在索引中,因此可以直接通过索引返回 EmployeeID,FirstName, LastName,不需要访问数据页。,是指在使用索引进行查询时,需要通过索引找到所需的数据行的行标识(Row lD),然后再根据这个行标识访问实际的数据页,从而获取查询所需的完整数据。虽然使用覆盖索引能提升查询性能,避免回表操作。原创 2018-12-04 23:09:34 · 402 阅读 · 1 评论