首页
Search
1
远程更新git项目代码
12 阅读
2
php 高并发总结
10 阅读
3
Sql的执行顺序
10 阅读
4
进程和线程,并发和并行
9 阅读
5
mysql 优化杂谈
8 阅读
lnmp
js
react
git
redis
mysql
php
laravel
闲谈
linux
python
c
51
go
Search
标签搜索
git
laravel
composer
php
Typecho
累计撰写
92
篇文章
累计收到
0
条评论
首页
栏目
lnmp
js
react
git
redis
mysql
php
laravel
闲谈
linux
python
c
51
go
页面
搜索到
3
篇与
馒头日志,馒头的日志,php,laravel,git,nginx,linux,centos
的结果
2022-04-30
mysql 优化杂谈
依据:sql查询的时间主要是: 磁盘寻址,磁盘读取。数据库服务器同时使用顺序IO和随机IO。随机IO受益于缓存。顺序IO非常快,是随机IO的好几个量级,不需要缓存。一个随机读一般意味着存储引擎必须执行索引操作。比如B树。顺序读一般是遍历简单数据结构,比如链表顺序I/O :指的是本次 I/O 给出的初始扇区地址和上一次 I/O 的结束扇区地址是完全连续或者相隔不多的。反之,如果相差很大,则算作一次随机 I/O。而发生随机I/O可能是因为磁盘碎片导致磁盘空间不连续,或者当前block空间小于文件大小导致的。顺序 I/O 比随机 I/O 效率高的原因是:在做顺序 I/O 的时候,磁头几乎不用换道,或者换道的时间很短;而对于随机 I/O,如果这个 I/O 很多的话,会导致磁头不停地换道,造成效率的极大降低。索引将随机IO变成顺序IO聚蔟索引一个表只能有一个聚蔟索引,基本是主键id,速度最快。覆盖索引在sex建立索引explan selet sex from user where sex=0; # using index 就是覆盖索引。相当于说使用索引获得数据,不需要再查找数据行。这个方式跟B+树的叶子节点存储索引值有关系。小技巧1.适当添加索引,一个表的索引数最好不要超过6个(影响插入 更新 新增性能)2.数据结构尽量使用固定长度,尽量使用整数类型,长度固定(数据库长度是一定的,但是内存分配确是按照字段长度定义)3.不要在sql进行计算4.不要在where 子句中使用 != 或 <> 操作符(全表查询),用 > or <代替5.尽可能给默认值,不用留null(导致全表)6.避免使用模糊查询(用 like key%代替 或者Elasticsearch )select * from message_1 where content in (select content from message_1 where content like "%今天不开心%");7.开启慢查询,explan 分析sql8.大表先分页 在join在用到group by时,即使你不需要排序,MySQL会默认根据分组字段order by。考虑一下order by null:explain select * from record group by create_at order by null 可以看到外部排序没有了。也可以使用 加索引的临时表有这样需求,有一张每天ip访问的记录表,要统计每天的ip唤起,可以考虑创建一张每天的统计表。insert into record_day SELECT COUNT(*) as num,FROM_UNIXTIME(time,'%Y-%m-%d') as date FROM record GROUP BY FROM_UNIXTIME(time,'%Y-%m-%d')11.索引最左原则,利用组合索引可以对or语句优化。组合索引很好用
2022年04月30日
8 阅读
0 评论
0 点赞
2022-04-28
mysql 【innodb】隔离级别测试
在mysql设计一个张表event,引擎是innodb,开启2个控制台,按照 t1 t2 t3 t4 t5 t6 顺序执行id num 1 18 开启控制台1begin; select num from event where id=1; //t1 select num from event where id=1; //t4 select num from event where id=1; //t6 开启控制台2begin; update event set num=20 where id=1 //t2 select num from event where id=1; //t3 commit //t5 【可重复读】结果:18 20 20 18【不可重复读】结果:18 20 20 18观察得出结论:【可重复读】(mysql默认隔离级别) 事务开始后不被其它【已提交】【未提交】的SQL 影响 单个事务中,修改值影响后面操作【不可重复读】 事务开始后不被【未提交】的SQL影响,会被【已提交】的SQL影响 单个事务中,修改值影响后面操作【补充】mysql查看当前的隔离级别show variables like 'transaction_isolation'; mysql设置隔离级别set session/global transaction isolation level read uncommitted | read committed | repeatable read | serializable ;
2022年04月28日
3 阅读
0 评论
0 点赞
2022-04-12
进程和线程,并发和并行
进程和线程A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。 B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 C.一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行。 并发和并行A. 多线程程序在一个核的cpu上运行,就是并发。 B. 多线程程序在多个核的cpu上运行,就是并行。 协程和线程协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的。 线程:一个线程上可以跑多个协程,协程是轻量级的线程。
2022年04月12日
9 阅读
0 评论
0 点赞