4.避免全表扫描通常情况下,如果MySQL(或者其他关系数据库模型)需要在数据表中搜索或扫描任意特定记录时 , 就会用到全表扫描 。此外,通常最简单的方法是使用索引表,以解决全表扫描引起的低效能问题 。然而,正如我们在随后的问题中看到的,这存在错误部分 。
5.使用“EXPLAIN”进行查询当需要调试时 , EXPLAIN是一个很好的命令,下面将对EXPLAIN进行深入探讨 。
MySQL性能调优 – 你必须了解的15个重要变量前言:
MYSQL 应该是最流行了 WEB 后端数据库 。虽然 NOSQL 最近越来越多的被提到,但是相信大部分架构师还是会选择 MYSQL 来做数据存储 。本文作者总结梳理MySQL性能调优的15个重要变量,又不足需要补充的还望大佬指出 。
1.DEFAULT_STORAGE_ENGINE
如果你已经在用MySQL 5.6或者5.7,并且你的数据表都是InnoDB,那么表示你已经设置好了 。如果没有,确保把你的表转换为InnoDB并且设置default_storage_engine为InnoDB 。
为什么?简而言之,因为InnoDB是MySQL(包括Percona Server和MariaDB)最好的存储引擎 – 它支持事务,高并发,有着非常好的性能表现(当配置正确时) 。这里有详细的版本介绍为什么
2.INNODB_BUFFER_POOL_SIZE
这个是InnoDB最重要变量 。实际上,如果你的主要存储引擎是InnoDB,那么对于你,这个变量对于MySQL是最重要的 。
基本上,innodb_buffer_pool_size指定了MySQL应该分配给InnoDB缓冲池多少内存,InnoDB缓冲池用来存储缓存的数据 , 二级索引,脏数据(已经被更改但没有刷新到硬盘的数据)以及各种内部结构如自适应哈希索引 。
根据经验,在一个独立的MySQL服务器应该分配给MySQL整个机器总内存的80% 。如果你的MySQL运行在一个共享服务器,或者你想知道InnoDB缓冲池大小是否正确设置,详细请看这里 。
3.INNODB_LOG_FILE_SIZE
InnoDB重做日志文件的设置在MySQL社区也叫做事务日志 。直到MySQL 5.6.8事务日志默认值innodb_log_file_size=5M是唯一最大的InnoDB性能杀手 。从MySQL 5.6.8开始,默认值提升到48M,但对于许多稍繁忙的系统,还远远要低 。
根据经验 , 你应该设置的日志大小能在你服务器繁忙时能存储1-2小时的写入量 。如果不想这么麻烦,那么设置1-2G的大小会让你的性能有一个不错的表现 。这个变量也相当重要,更详细的介绍请看这里 。
当然,如果你有大量的大事务更改 , 那么,更改比默认innodb日志缓冲大小更大的值会对你的性能有一定的提高,但是你使用的是autocommit,或者你的事务更改小于几k , 那还是保持默认的值吧 。
4.INNODB_FLUSH_LOG_AT_TRX_COMMIT
默认下,innodb_flush_log_at_trx_commit设置为1表示InnoDB在每次事务提交后立即刷新同步数据到硬盘 。如果你使用autocommit,那么你的每一个INSERT, UPDATE或DELETE语句都是一个事务提交 。
同步是一个昂贵的操作(特别是当你没有写回缓存时),因为它涉及对硬盘的实际同步物理写入 。所以如果可能,并不建议使用默认值 。
两个可选的值是0和2:
* 0表示刷新到硬盘 , 但不同步(提交事务时没有实际的IO操作)
* 2表示不刷新和不同步(也没有实际的IO操作)
所以你如果设置它为0或2,则同步操作每秒执行一次 。所以明显的缺点是你可能会丢失上一秒的提交数据 。具体来说,你的事务已经提交了,但服务器马上断电了 , 那么你的提交相当于没有发生过 。
显示的,对于金融机构,如银行,这是无法忍受的 。不过对于大多数网站 , 可以设置为innodb_flush_log_at_trx_commit=0|2,即使服务器最终崩溃也没有什么大问题 。毕竟,仅仅在几年前有许多网站还是用MyISAM,当崩溃时会丢失30s的数据(更不要提那令人抓狂的慢修复进程) 。
推荐阅读
- 战争模拟器下载,现代战争模拟器下载
- java生日输入代码,java的生日
- 钉钉直播怎么连接上电视,钉钉怎么连接电视看视频
- go语言有结构的书吗 go语言 结构体
- 捷豹汽车如何查找新媒体,捷豹怎么看视频
- 南平区块链公司,福建区块链应用商会
- 什么是cpu满载,cpu满载是什么意思
- linux命令push linux命令bash什么意思
- 外卖商场小程序开发工具的简单介绍