![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
sql
文章平均质量分 50
得一人终老
充实自己
展开
-
索引的设计原则
1、适合素引的列是出现在 where 子句中的列,或者连接子句中指定的列2、基数较小的表,索引放果较差,没有必要在此列建立索引3、使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间,如果搜索词超过索引前缀长度,则使用引排除不匹配的行,然后检查其余行是否可能匹配。4、不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,素引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即5、定义有外键的数据列一定要建立索引。原创 2022-03-27 16:23:14 · 1011 阅读 · 0 评论 -
mysql索引的数据结构以及各自优势
索引的数据结构和具体存储引擎的实现有关,在MySQL中较多的索引有Hash索引、B+树索引等。InnoDB存储引擎的默认索引实现为:B+树索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议使用BTree索引。B+树B+树是一个平衡树,从根节点到每个叶子节点的高度差不超过1,而且同层级的节点间有指针相互链接。在B+树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动,而且基于索引的顺序扫描时,原创 2022-03-27 16:22:25 · 1295 阅读 · 0 评论 -
mysql聚簇和非聚簇索引
都是B+树的数据结构聚簇索引:将数据存储和索引放到一起,都是按照一定的顺序组织,找到索引也找到了数据,数据的物理存储和索引顺序是一致的,即:只要索引相连,那么对应的数据一定也是相邻存储在磁盘上的非聚簇索引:叶子节点不存储数据,存储的是数据行地址,也就是说根据索引查找到数据行的位置再去磁盘查找数据,这个有点类似一本书的目录。优势:1、根据聚簇索引可以直接获取数据,相比非聚簇索引需要第二次查询效率要高2、聚簇索引对于范围查询效率更高,因为其数据是按大小排列的3、聚簇索引适合用在排序的场合,非聚簇原创 2022-03-27 16:21:36 · 3203 阅读 · 0 评论 -
MVCC实现原理
PostgreSQL、Oracle/MySQL和SQL Server的MVCC实现原理方式关系数据库管理系统使用MVCC(Multiversion Concurrency Control多版本并发控制)来避免写操作堵塞读操作的并发问题,MVCC也就是通过使用数据的多个版本保证并发读写不冲突的一种机制,不同的数据库有不同的实现,这也是数据库系统让人头疼的地方,关系数据库表面看上去很简单方便,使用标准的SQL语句操作让人很放心,但是随着系统规模增加,并发用户增加,数据库会出现性能降低的现象,这时我们可能需要从原创 2022-03-27 16:20:47 · 321 阅读 · 0 评论 -
SQL存储引擎
InnoDB存储引擎InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,上图也看到了,InnoDB是默认的MySQL引擎。InnoDB主要特性为MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合InnoDB存储引擎原创 2022-03-27 16:19:18 · 655 阅读 · 0 评论 -
SQL事务隔离级别
第一级别:Read Uncommitted(读取未提交内容)(1)所有事务都可以看到其他未提交事务的执行结果(2)本隔离级别很少用于实际应用,因为它的性能也不比其他级别好很多(3)该级别引发的问题-脏读(读取了未提交的数据)第二级别:Read Committed(读取提交内容)(1)Oracle、SQL Server默认隔离级别(2)该隔离级别出现的问题-不可重复读(在同一个事务中执行完全相同的select语句时可能看到不一 样的结果)第三级别:Repeatable Read..原创 2022-03-27 16:18:24 · 709 阅读 · 0 评论