搜索引擎优化高级编程:php版( 要用B+Tree第三实现高并发访问,保证事务的安全性?)
优采云 发布时间: 2022-03-08 15:17搜索引擎优化高级编程:php版(
要用B+Tree第三实现高并发访问,保证事务的安全性?)
MySQL数据库性能优化
为什么要优化??
由于数据量太大,从项目部署到用户使用,每天都有几十万条数据增长,给服务器带来了巨大的负担。互联网一直追求高性能,但随着业务规模越来越大,用户数量越来越多。,服务器的性能越来越差,所以我们不得不对数据库有更高的要求。
从哪儿开始??
首先是查询速度。我们期望数据量达到TB级别,仍然能够达到百万级别的查询速度。
第一个 二、 是并发量。我们对它的要求是可以同时处理上千甚至上万的并发访问,还需要配合Redis、MQ等。
第三,高可用性。随着业务规模的不断扩大,我们必须随时准备扩展服务器。它可能从几十台服务器扩展到数百甚至数千台服务器,所以我们需要携带MySQL集群。
第四,交易安全。当业务存在高并发访问时,如何保证读写一致性?? ? 保证交易安全?? ? 参考多线程的思想。.
解决办法是什么?? ?
首先要考虑的是应该使用什么样的存储引擎,因为存储引擎决定了它的性能,比如你用的是汽车、飞机还是坦克,每个引擎都有其特殊的作用。业务中常用的有两种,INNODB和MYISAM。
如何选择?? ?
当我们对业务没有太多的读写需求,而专注于查询,使用MyISAM,当我们对事务完整性要求高、并发要求高、增删频繁、读写操作频繁时,就是最好使用 INNODB。
其次,我们要加快查询速度,所以需要给表的特殊字段添加索引。索引的原理是改变数据的存储结构。有两种类型:第一种是BTree,第二种是B+Tree。我们通常在业务中使用 B+Tree。BTree有一个特点,根节点和叶子节点都会存储数据,这会导致例如查询底层叶子节点,逐层读取根节点的数据,增加磁盘数量等。I/O 的数量会无形中增加数据库的压力。所以使用 B+Tree
高可用方案的第三个实现,这里我们为数据库服务携带一个主从结构集群,缓解读写压力
四是安全问题。这里可以参考线程安全问题,比如如何解决高并发访问?? 如何保证交易的完整性?? 像RocketMQ也涉及到事务性消息,如何避免此类问题,我们可以加锁。以下是锁的分类。
SQL 优化
1、查询要尽量避免全表扫描,首先考虑在where和order by字段上添加索引
2、避免在where字段中使用NULL值,所以在设计表的时候尽量使用NOT NULL约束,有些数据会默认为NULL,可以设置默认值为0或-1
3、避免在where子句中使用!=或运算符,Mysql只对=、BETWEEN、IN,有时还有LIKE使用索引
4、在where连接条件中避免使用OR,否则可能导致引擎放弃索引执行全表扫描,可以使用UNION进行合并查询
select id from t where num = 30 union select id from t where num = 40;
5、尽量避免where子句中的函数或表达式
6、最好不要使用select * from t,将“*”替换为特定字段的列表,不要返回任何未使用的字段
7、in 和 not in 也要谨慎使用,否则会导致全表扫描,比如
select id from t where num IN(1,2,3)如果是连续值,建议使用 between and,select id from t where 1~3;
8、select id from t where col like %a%; 模糊查询左侧的 % 将导致全表检索。如果需要全文检索,可以使用es、slor等全文搜索引擎
9、limit offset rows 关于分页查询,尽量保证不会出现大偏移。例如limit 10000, 10相当于丢弃前10000行,然后取10行作为查询的行数。您可以添加一些条件。过滤它(完成过滤器)而不是跳过有限制的查询数据。这是==offset做无用功的问题==。对应实际项目,要避免页码大的情况,尽量引导用户做条件过滤
总结
这是文章关于MySQL数据库性能优化的介绍。更多关于MySQL性能优化的信息,请搜索编程宝库之前的文章,希望以后支持编程宝库!
下一节:MySQL数据库主从复制和读写分离 MySQL教程
一.主从复制 主从复制:在实际生产中,为了解决MySQL的单点故障,提高MySQL的整体*敏*感*词*能,一般都会使用主从复制。即备份数据库中的数据和语句。主从复制三线程...