![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
zhangli709
这个作者很懒,什么都没留下…
展开
-
锁:悲观锁和乐观锁
按照锁粒度进行划分1. 页锁,页的粒度上进行锁定。2. 表锁,对数据表进行锁定,锁定粒度很大,同时发生锁冲突的概率也会较高,数据访问的并发度低。不过好处在于对锁的使用开销小,加锁会很快。3. 行锁,按照行的粒度对数据进行锁定。锁定力度小,发生锁冲突概率低,可以实现的并发度高,但是对于锁的开销较大,加锁较慢,容易出现死锁。从数据库管理的角度对锁进行划分共享锁* 读锁,S锁,共享锁的资源可以被其它用户读取,但是不能修改。排它锁* 独占锁,写锁,X锁。锁定的数据只允许进行锁定的操作的事务使用,原创 2020-07-26 16:47:34 · 129 阅读 · 0 评论 -
最理想的索引
索引片和过滤因子索引片* SQL查询语句在执行中需要扫描的一个索引频段,我们会根据索引片中包含的匹配列的数量不同,将索引分成窄索引和宽索引。* 如果索引片越宽,需要顺序扫描的索引页就越多,如果索引片越窄,就会减少索引访问的时间。如何通过宽索引避免回表* 回表:数据库根据索引找到数据行之后,还需要通过主键,再次到数据表中读取数据的情况。过滤因子* 过滤因子:谓词的选择性。就是where条件中,每个条件,都是一个谓词。三星索引1. 在where条件语句中,找到所有等值谓词中的条件列,将他原创 2020-07-26 11:28:47 · 178 阅读 · 0 评论 -
从磁盘I/O的角度理解SQL查询的成本
数据库存储的基本单位是页,对于一颗B+树的索引来说,是先从根节点找到叶子节点,也就是先查找数据行所在的页,再将页读入到内存中,再内存中对页的记录进行查找,从而道道想要数据。数据库缓冲池* (降低访问的成本)* 缓冲池管理器会尽量将经常使用的数据保存起来,在数据库进行页面读操作的时候,首先会判断该页面是否在缓冲池中,如果存在就直接读取,如果不存在,就会通过内存或磁盘将页面放到缓冲池中再进行读取。查看缓冲池的大小* MySQL MyISAM, key_buffer_size, show.原创 2020-07-26 11:03:11 · 306 阅读 · 0 评论 -
从数据页的角度理解B+树查询
数据库中的存储结构是怎样的。* 在数据库中,不论读一行,还是读多行,都是将这些行所在的页进行加载。也就是说,数据库管理存储空间的基本单位是页。* 行 《 页 《 区 《 段 《 表。区: 比页大一级的存储结构,在InnoDB存储引擎中,一个区会分配64个连续的页。页:默认大小是16KB段:由一个或多个区组成,区在文件系统是一个连续分配的空间,在InnoDB是连续的64个页,不过在段中不哟啊求区与区之间是相邻的。段是数据库中的分配单位,不同类型的数据库对象以不同的段形式存在。当我们创建数据表,原创 2020-07-22 10:10:48 · 447 阅读 · 0 评论 -
如何通过索引让SQL查询效率最大化
创建索引有哪些规律字段的数值有唯一性的限制,比如用户名频繁作为where查询条件的字段,尤其在数据表大的情况下。需要经常group by 和 order by的列update,delete 的 where条件列,一般也需要创建索引distinct 字段需要创建索引做多表join连接操作时,创建索引需要注意以下原则* 连接表的数量尽量不要超过3张。* 对where条件创建索引* 对用于连接的字段创建索引,并且该字段在多张表中的类型必须一致。什么时候不需要创建索引1. where条件里原创 2020-07-22 09:45:38 · 359 阅读 · 0 评论 -
Hash索引的底层原理
Hash检索效率 O(1)MySQL中的Hash索引Hash冲突哈希,就是将键 转换为一个数字地址,存储数据,查找时可以直接找到,但是不同的键算出来的数字地址可能一样,这时,我们称为哈希冲突,存储的数据以链表的形式存储,之后的查询时间就是O(N)了。但是我们通常默认不冲突,时间复杂度为O(1)。Hash索引和B+树索引的区别hash索引不能进行范围查询,B+树可以。hash索引不支持联合索引的最左侧原则,而B+树可以。hash索引不支持order by 排序,B+树可以。...原创 2020-07-22 09:17:58 · 1507 阅读 · 0 评论 -
SQL索引
索引简介索引:帮助数据库管理系统搞笑获取数据的数据结构索引的种类1. 普通索引, 基础索引2. 唯一索引, 基础索引+ 唯一性3. 主键索引 基础索引 + 唯一性+ 非空4. 全文索引 索引的使用1. where 后面查询的字段需要是索引字段。2. 索引还可以创建联合索引。3. 索引的最左前缀原则。4. 有条件使用索引,没有条件创造条件使用索引...原创 2020-07-01 18:08:24 · 75 阅读 · 0 评论 -
数据表的规范
数据库的设计范式六种范式1. 第一范式2. 第二范式3. 第三范式4. BCNF 巴斯-科德范式5. 第四范式6. 第五范式 完美范式* 范式设计越高阶,冗余度越低。数据表中的键1. 超键: 能唯一标识元组的属性集叫超键2. 候选键:如果超键不包括多余的属性,这个超键就是候选键3. 主键:用户从候选键中选择一个作为主键4. 外键:如果表1的某属性集不是自身的主键,而是表2的主键,那么这个属性集就是表1的外键5. 主属性:包含在任意候选键中的属性称为主属性。6. 非主属性:与原创 2020-07-01 17:39:24 · 398 阅读 · 0 评论 -
数据库调优
数据库调优的目标1. 通过用户的反馈2. 日志分析3. 服务器资源使用监控4. 数据库内部状况监控调优的思路1. 选择合适的DBMS 2. 优化表设计,表的结构设计。3. 优化逻辑查询,对sql语句进行等价变换。4. 优化物理查询, 核心是高效地建立索引,并通过这些索引来做各种优化5. 使用Redis 或 Memcached缓存6. 库级优化, 读写分离,分区分表。分析数据库调优1. 选择比努力更重要。2. 重写sql, 让执行器执行的更有效率。(使用上索引)3. 外援帮助原创 2020-07-01 16:02:52 · 117 阅读 · 0 评论 -
使用python操作MySQL
python DB API 规范python操作DBMS1. 引入API模块2. 与数据库建立连接;3. 执行SQL语句4. 关闭数据库连接使用MySQL-connector# -*- coding: UTF-8 -*-import mysql.connector# 打开数据库连接db = mysql.connector.connect( host="localhost", user="root", passwd="XXX", # 写上你的数据库密码 database='wucai', au原创 2020-07-01 15:50:57 · 106 阅读 · 0 评论 -
SQL游标
什么是游标* 游标是面向过程的编程方式,这与面向集合的编程方式不同。* 游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针。如何使用游标* 游标是一种控制数据集的灵活的处理方式1. 定义游标 declare cursor_name cursor for select_statement2. 打开游标3. 从游标中取得数据4. 关闭游标5. 释放游标使用游标来解决问题...原创 2020-07-01 15:35:16 · 153 阅读 · 0 评论 -
事务隔离级别
事务并发处理可能存在的异常脏读 Dirty Read读未提交不可重复读 Unrepeatable Read两次读取的结果不同幻读 Phantom Read事务隔离级别级别脏读不可重复读幻读读未提交允许允许允许读提交禁止允许允许可重复读禁止禁止允许可串行化禁止禁止禁止读未提交* 允许读到未提交的数据,未使用锁。读提交* 只能读到已经提交的内容,可以避免脏读。 默认隔离级别。可重复读* 保证一个事务在相同原创 2020-07-01 15:25:54 · 98 阅读 · 0 评论 -
SQl事务操作
事务的特性: ACID1. A 原子性 Atomicity 数据处理操作的基本单位,不可分割。2. C 一致性 Consistency 要么全部成功,要么全部失败,前后状态一致。3. I 隔离性 Isolation 每个事务时相互隔离的,彼此互不影响。4. D 持久性 Durability 事务提交之后,数据是被保存的。事务的控制1. start transaction/ begin 开启一个事务2. commit: 提交事务3. rollback 回原创 2020-07-01 15:08:52 · 300 阅读 · 0 评论 -
SQL存储过程
什么是存储过程,如何创建一个存储过程* Stored Procedure * 存储过程=SQL语句+流控制语句定义存储过程定义create procedure 存储过程名称(【参数列表】)begin需要执行的语句end.创建CREATE PROCEDURE `get_hero_scores`( OUT max_max_hp FLOAT, OUT min_max_mp FLOAT, OUT avg_max_attack FLOAT, s VARCHAR(255) )BEGIN SE原创 2020-07-01 14:15:22 · 123 阅读 · 0 评论 -
什么是SQL函数?为什么使用sql函数可能会带来问题
常用的SQL函数1. 算术函数2. 字符串函数3. 日期函数4. 转换函数算术函数1. ABS 取绝对值2. MOD 取余3. ROUND 四舍五入为指定的小数位数字符串函数1. concat 多个字符串拼接2. length 计算字段的长度(汉字=3, 数字/字母=1)3. char_length 计算字段的长度 (汉字/数字/字母=1)4. lower 字符串转化为小写5. upper 字符串转化为大写6. replace 替换函数 7. substring原创 2020-06-30 10:42:03 · 410 阅读 · 0 评论 -
mysql索引
索引的常见模型哈希表, 适用于只有等值查询的场景有序数组, 等值查询和范围查询场景。只适用于静态存储引擎。二叉搜索树InnoDB的索引模型每一个索引在InnoDB里面对应一颗B+树。主键索引,聚簇索引。存放整行数据。非主键索引,二级索引。存放主键的值。索引维护B+树为了维护索引有序性,在插入新值的时候需要做必要的维护。主键长度越小, 普通索引的叶子节点就越小,普通索引占...原创 2020-05-07 22:49:00 · 89 阅读 · 0 评论 -
mysql事务
事务分类原子性 Atomicity一致性 Consistency隔离性 Isolation持久性 Durability隔离性隔离别读未提交 read uncommitted一个事务还未提交,他所做的变更就可以被别的事务看到。读提交 read committed一个事务提交以后,他所做的变更就可以被别的事务看到可重复读 repeatable read一个事务执行过程中...原创 2020-05-07 21:48:06 · 85 阅读 · 0 评论