mysql高级
qq_26774439
个人学习记录
展开
-
mysql索引结构
BTree索引:【初始化介绍】一颗b树,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99...原创 2019-07-12 17:02:44 · 92 阅读 · 0 评论 -
关于幻读,可重复读,读已经提交
都是从网上看来,不对之处欢迎批评。幻读意思为读到了别人已经提交的数据,但在RP隔离级别下,因为MVCC版本机制导致一个事务中读的数据都是一样的,所以感觉没有幻读的情况。因为select普通读为快照读,当进行select lock in share mode时则为当前读,会读到别人插入的数据。解决办法用间隙读防止别人插入数据保证数据的一致性。当对主键索引先进行查找时,若没有进行间隙锁,当...原创 2019-07-16 13:40:23 · 1713 阅读 · 0 评论 -
mysql索引优化(二)
单表优化: CREATE TABLE IF NOT EXISTS `article` (`id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,`author_id` INT(10) UNSIGNED NOT NULL,`category_id` INT(10) UNSIGNED NOT NULL,`views` I...原创 2019-07-11 23:13:51 · 140 阅读 · 0 评论 -
杂记
mysql可重复读,指的是同一个事务读取的一致,别的事务提交了就不一样了,底层读取的事务艾迪不会自动更新,读已提交则会更新,导致读的不一样。mysql底层hash查找精确查找可以范围查找不行mysql读已提交底层有事务编号,等某事物提交好,编号更新,即可读取脏读:指的是读到了别人还未提交的数据不可重复读:指的是别人已经提交数据,在一次事务中读到的数据不一样。幻读:读到了别人插入的数据。...原创 2019-07-15 18:46:24 · 177 阅读 · 0 评论 -
mysql索引优化(一)
性能下降SQL慢 执行时间长 等待时间长 可能原因:查询数据过多关联了太多的表,太多join没有利用到索引:索引针对列建索引。但并不可能每一列都建索引 索引并非越多越好。当数据更新了,索引会进行调整。也会很消耗性能。 且 mysql 并不会把所有索引都用上,只会根据其算法挑一个索引用。所以建的准很重要。服务器调优及各个参数设置(缓冲、线程数等)索引:MySQL官方对索引的...原创 2019-07-10 21:02:08 · 620 阅读 · 0 评论 -
mysql两种引擎对比
对比 myisam innodb 主外键 不支持 支持 事务 不支持 支持 行表锁 表锁,只操作一条数据也会锁表,不适合高并发 行锁,操作时只锁某一行,不对其他操作有影响,适合高并发 缓存 只缓存索引不缓存真是数据 缓存索引与真实数据,对内存性能要要求较高,且内存对性能有决定性影响 表空间 小 大 关注...原创 2019-07-10 12:34:35 · 191 阅读 · 0 评论 -
mysql子查询与join的区别
两者区别:思想上的区别:子查询理解:①先知道需要查询并将数据拿出来(若from 后的表也是一个子查询结果)。②在去寻找满足判断条件的数据(where,on,having 后的参数等)。而这些查询条件通常是通过子查询获得的。子查询是一种根据结果找条件的倒推的顺序。比较好理解与判断例题中:“人物”在t_emp 表中,所以第一个from 是t_emp 表。(也可以直接将子查询方法 from 后面...原创 2019-07-14 12:38:23 · 4168 阅读 · 0 评论 -
mysql 锁机制
锁的分类:读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。为了尽可能提高数据库的并发度,每次锁定的数据范围越小越好,理论上每次只锁定当前操作的数据的方案会得到最大的并发度,但是管理锁是很耗资源的事情(涉及获取,检查,释放锁等动作),因此数据库系统需要在高并发响应和系统性能两方面进行平衡,这样就产生了“锁粒...原创 2019-07-14 00:14:53 · 72 阅读 · 0 评论 -
mysql设置字符集
1 查看字符集show variables like 'character%';show variables like '%char%';看看出现的结果:默认的是客户端和服务器都用了latin1,所以会乱码。2 修改my.cnf在/usr/share/mysql/ 中找到my.cnf的配置文件,拷贝其中的my-huge.cnf 到 /etc/并命名为my.cn...原创 2019-07-10 10:37:33 · 92 阅读 · 0 评论 -
mysql死锁
当出现两条语句当出现事务一第一条语句执行,事务2第二条语句执行第一条时,他们接下来都会等待对方的锁进行释放,从而导致死锁。为了解决这些问题,mysql采取了死锁检测与死锁超时机制。越复杂的系统就越能检索到死锁的循环依赖,比如说innodb引擎,避免了死锁导致查询很慢。还有一种就是锁等待超时的设定放弃锁请求,通常来说不太好。innodb目前的方法将持有最小行级的事务进行回滚。锁的...原创 2019-07-17 23:05:04 · 99 阅读 · 0 评论