后台开发,不了解一丢丢数据库怎么能行。少不了得了解一点优化知识吧,要不别人嫌你的慢的要死怎么办。至少得找到能够下手的点。
遇到问题应该如何去思考。
优化思路,从这些点切入。
1.数据库设计
2.sql语句优化
3.数据库参数配置
4.恰当的硬件资源和操作系统
那么就分开从上面这些点简单说一哈。
数据库设计
怎么设计?遵循三范式。
什么是三范式?
1.字段不可分。
2.有主键,非主键字段依赖主键。
3.非主键字段不能互相依赖。
三范式言简意赅,没啥说的。
还有,选用合适的数据类型。这个没必要说了。经验积累。
选择合适的引擎:
MyISAM:默认的Mysql存储引擎。插入读写多,更新删除少,并对事务的完整性要求的不是很高。访问快。
InnoDB:提交了具有提交、回滚、崩溃恢复能力的事务安全。写的效率差一些、而且占用更多磁盘空间。
sql语句优化
这个就是重点了。这部分也是常常做为后端开发需要优化的一个点。这就是所谓的优化慢SQL部分。
首先,慢SQL,什么是慢呢,查多久算慢,1s还是10s。
机器肯定不知道,你得告诉它。
show variables like 'long_query_time';
set long_query_time=2;
show那个参数看定义慢查询的时间是多少,默认10s,好,改,两秒你就是慢。
以后超过两秒后就是慢SQL了。去哪找?它默认不给你记录。得自己开。
bin\mysqld.exe - -safe-mode - -slow-query-log(开启)
开!版本不一样,开的方式也不一样,简单查一下就出来了。
这样的话,要是超过2s的话,这些SQL都给你记下来了。
默认目录是data中的host-name-slow.log。 忘记了话,根据命令查一下。
slow_query_log //是否打开日志记录
slow_query_log_file //日志存放位置
SQL记下来了,那怎么办呢。当然是分析它!
如何分析?使用explain命令分析它,分析出许多字段什么意思。
select_type:表示查询的类型。
table:输出结果集的表
type:表示表的连接类型
possible_keys:表示查询时,可能使用的索引
type:扫描类型
key:表示实际使用的索引
key_len:索引字段的长度
rows:扫描出的行数(估算的行数)
Extra:执行情况的描述和说明
从这个分析结果就能看出来,比如:原来我的SQL没用到索引!!!
查看索引使用情况:
show status LIKE 'Handler_read%'
Handler_read_key越高表示使用索引查询到的次数
Handler_read_rnd越高说明效率越低
分析完如何解决优化呢?留个入口,单独写索引(这里)。
数据库参数配置
1.内存,一般用InnoDB,所以两个调大一些
innodb_additional_mem_pool_size = 64M
innodb_buffer_pool_size =1G
2.修改存储引擎和最大连接数
恰当的硬件资源和操作系统
这。。我也不知道选啥。
没写多少,大概思路是这样。