数据库
文章平均质量分 83
vinter-he
目前在一个创业型公司担任技术负责人,因为工作需要和个人爱好,接触了几种语言和些许架构知识,写的博客也多是记录和分享自己的工作和学习过程中的一些经验。以我的水平在平台上还算是个小学生,感谢在我前进路上帮过我的各位大牛,有不足之处,望大家不吝赐教。
展开
-
数据库单表大量数据的分页优化方案
1 何时需要优化1.1 单表数据量大,访问最后几页的时候特别慢比如我们单表的数据有1000w以上,此时当偏移量offset比较大的时候,普通查询会导致查询效率从前几页的几十毫秒,增加到十几秒甚至更高1.2 非正常访问其实绝大部分情况下没有多少用户真的翻页到最后几页,大致的情况为前端分页组件有跳转到最后几页的链接,或者是被别人恶意请求数据,比如爬虫爬取数据。2 问题出现在mysql的limit机制分页操作通常会使用 limit 加上偏移量的办法实现,同时再加上合适的 order by 子句。但这会原创 2021-03-19 15:01:51 · 4125 阅读 · 0 评论 -
缓存穿透、缓存雪崩、缓存击穿及其解决方案
缓存在系统中的位置因为大型系统,其数据库资源比较紧俏,并且数据库的访问速度并发量远不如目前的各种内存缓存系统。所以缓存的主要意义是减少数据库压力,增加访问速度。其位置是建立在数据库层和业务逻辑层之间。缓存容易出现的问题人为攻击类型缓存穿透描述:缓存穿透是指访问数据库中都没有的数据(数据库中没有,缓存中自然也没有),如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。解决方案:接口层增加校验,排除明显的非法数据,例如id<=0的直原创 2020-09-02 11:24:15 · 15797 阅读 · 0 评论 -
聚簇索引和非聚簇索引的区别对比
释义:聚簇索引:将数据与索引放到了一起存储,索引树结构的叶子节点保存了行数据非聚簇索引:将数据与索引分开存储,索引结构的叶子节点放的是指向数据的指针(或者说是地址)在mysql中的应用innodb的索引都是聚簇索引,其数据直接存放在叶子节点上,但是主键索引(一级索引)叶子节点中存放的就是数据本身,辅助索引的叶子节点上存储的是主键。myisam使用的是非聚簇索引,其叶子节点上不存放数据,存放的是数据的实际地址。一张表一定只有一个聚簇索引,因为聚簇索引代表了文件的实际存储形式,一张表在磁盘上只会有原创 2020-08-27 16:22:48 · 14088 阅读 · 3 评论 -
innodb的写缓存
innodb的写缓存,其设计思想同样是为了减少磁盘的io来提升性能。对于数据库的写来说,有如下两种情况1. 修改的内容所在页在缓冲池内会有如下两步操作直接修改缓冲池中的页,一次内存操作写入redo log,一次磁盘顺序写操作那什么时候数据会把修改的数据落盘呢,他会进行定期刷盘,如果没有等到刷盘时间,数据就被从缓存淘汰,就会把脏页刷回磁盘。这样能减少io次数,提升性能。把随机写变成顺序写和批量写,这是优化程序性能的有效方式。这样数据在读取怎么保持一致性,数据库异常的时候是怎么处理的呢原创 2020-08-16 18:42:46 · 13987 阅读 · 0 评论 -
mysql的缓冲池buffer pool
缓存的概念在计算机中,缓存技术随处可见,其主要目的是提高访问速度。由于底层磁盘的存取速度比较慢,尝尝会使用内存作为缓存,这是我们程序员最常遇到的方式,比如java中的各种buffer,都是为了加快读取或者写入速度。另外还有一种是cpu参数中的缓存,一般有三级,每一级都是下一级的缓存。缓存是什么缓存其实不是一个物理设备,他是一种为了加快访问速度,同时控制成本的一种设计思路和理念。其通过把快速设备作为慢速设备的缓存,来提高系统的访问速度。其出现的原因就是高速设备一般价格昂贵。缓存的特点缓存一定有下一原创 2020-08-12 18:18:05 · 13431 阅读 · 0 评论 -
脏读,不可重复读,幻读区别和避免
在了解脏读,不可重复度,幻读之前,首先要明白这三种情况的出现都是和数据库并发事务有关联的,如果所有的读写都按照队列的形式进行,就不会出现问题。名词解析和解决方案脏读脏读又称无效数据读出(读出了脏数据)。一个事务读取另外一个事务还没有提交的数据叫脏读。例如:事务T1修改了某个表中的一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因回滚(Rollba...原创 2020-03-27 14:28:06 · 14136 阅读 · 0 评论 -
mysql刷题(不定时更新)
面试阶段大家基本都会问一些mysql的题,具体的高深理论以后再慢慢补充,但是刷题是不可避免的,下面直接上货创建/删除表和索引系列创建表CREATE TABLE if not exists `test_date` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date` date DEFAULT NULL, `temp` int(11) N...原创 2020-03-24 17:46:44 · 12895 阅读 · 0 评论 -
mysql用户操作、权限分配、远程登录设置
对最近mysql的常用运维命令进行整理查看使用的哪个配置文件启动的mysql1. ps aux|grep mysql|grep 'my.cnf'如果启动的命令中选择了配置文件,则可以查询出来,也可能查询不到。2. mysql --help|grep 'my.cnf'输出:order of preference, my.cnf, $MYSQL_TCP_PORT,/etc/my....原创 2019-03-13 14:15:59 · 741 阅读 · 0 评论 -
关于InnoDB的读写锁类型以及加锁方式
(本文为了方便,英文关键词都都采用小写方式,相关知识点会简单介绍,争取做到可以独立阅读)文章开始我会先介绍本文需要的知识点如下:innodb的聚簇索引(聚集索引)和非聚簇索引(二级索引、非聚集索引)的知识innodb的隔离级别(isolation level)简单的sql知识(能读懂sql语句)MVCC(Multi-Version Concurrent Control)多版本并发控制数据的脏读、幻...原创 2018-01-13 09:27:46 · 17009 阅读 · 8 评论