mysql 重新整理——性能下降的原因[四]
前言
什么是性能下降?
其实就是代码运行的环境变了,那么环境变化是什么?
比如cpu上升了,内存满了。有或者表中数量增加了,量变了。
其实这些是dba干的,但是呢,我们也需要去了解下,并且优化我们的code。
正文
简单介绍一个量大的情况,那么这个时候我们可能会建立索引,其实也不是量大去建立索引,而是量大且查询数据多,修改少。
在此举个栗子:
SELECT * from employees where first_name='Martial'
我在一张30w的employees 中做查询。
查询出来的结果为:
受影响的行: 0
时间: 0.645s
通过查询发现索引只有主键:
show index from employees
然后这是就想,如果要是在first_name中建立主键,那么是否能提升。
create INDEX idx_first_name on employees(first_name)
看下效果继续运行查询:
[SQL] SELECT * from employees where first_name='Martial'
受影响的行: 0
时间: 0.216s
效果明显哈。
当然这很简单,现在复杂一点点,这样子。
怎么说呢,就是要有first_name 和 last_name 一起。
这时候就要创建复合索引。
create INDEX idx_first_name on employees(first_name,last_name )
在下就在次执行重复操作了。
同样我们可以看到我使用了*,这时候问题同样来了,你想想看,这个语句性能就不好了。
同样如果性能下降了,还要从语句下手。
在我进公司的时候,有一个专门搞数据库的部门,设计师设计数据库的时候,我们查一条要join好几张表,这就是设计问题,后来改了表结构,但是代价有多大可以自己想到。
最后性能不强的还有一些配置,如线程数量,这个和硬件有关,专业dba干了,我们也很难去搞定。