理解了索引,才能用好索引。
微微了解一下索引是什么
很多人用书来比作 Mysql
,用来解释是什么。诚然,这是一个很好的比喻。
书名就表名,而书的目录部分,就是对应着 Mysql
的索引了,书的整体内容就是数据。
你可以通过目录来快速查找你想要的内容,而用不着一页一页的去翻。
代价就是你会多出来几张纸。
这张表要不要用索引?
Mysql
的大部分压力主要还是集中在查询语句中,而有用到索引查和没有用到索引查,在数据量大的情况下,可以称之为云泥之别。
那么,你的那张表需不需要用到索引呢?(默认是符合三范式的表设计结构,即这张表是有主键的,这里不讨论主键)有以下几个评判标准:
- 这张表上的查询变慢了
- 这张表的数据一直在快速增长
- 这张表需要经常进行查询
- 在设计之初已经能预料到这张表查询压力会变大
实战之优化第一步
如果你直接接收一个老项目,需要优化数据库,你会怎么做?
写程序,就像做医生,不能患者一来你就让他打点滴,挂盐水,开止疼片,吃消炎药吧?虽然能解决一些问题,但是病灶还在啊!
所以,一定是要按照步骤规范来:
- 先问生活习惯(看看应用层是否规范,是否有误)
- 体检,观察患者体态和病历(找出慢查询,观察一段时间运行状态,全面分析数据情况)
- 对症下药(找出问题后,再下手优化)
show global status like 'uptime';
-
首先看看数据库运行时长,如果运行时间太长的话(比如一两个月),就要注意了,赶紧通过程序日志方式或者调试,找到是哪个表哪个语句出现了
慢查询
。 -
什么是
慢查询
?慢查询不单单指查
得慢就叫慢查询
,而是指一条Sql
的执行时长超过一定限制,这种情况于Mysql
来讲才叫慢查询。
而Mysql
默认的时长是10
秒,而 10 秒是我们不能接受的,所以首先我们得改成1
秒。
查看默认时间:
show variables like 'long_query_time';
设置默认时间为 1:
set long_query_time=1;
经过一段时间的观察后,键入下面的命令,看看发生了多少次慢查询:
show status like 'slow_queries';
如果程序确实出现了变慢症状,且通过程序也不知道到底是哪条sql引发的慢查询(理应通过程序找到慢查询,程序员心里应该做到自己编写的程序哪里可能会发生慢查询)。那么就要开启Mysql
慢查询日志了。
如何开启慢查询日志?我不做讲解也不做记录,可以百度出来。
做程序的人不要和硬盘比记性,不能和搜索引擎比速度。程序需要掌握更多的思想,而不是让脑袋记录更多的命令和配置
。
当找出慢查询语句后,再做分析,哪条SQL最慢,哪条SQL出现频率最高,要做到心中有数。
再根据这些症状,适当的添加索引,做各种优化操作。
还有一条辅助命令,它能告诉你告诉你从服务启动到现在共执行了多少次(查询)操作。
show global status like 'com_select';
对应的当然也有 com_insert
,com_update
,com_delete
了,这个指标能告诉你,这个项目中,与数据库而言,到底是哪个操作占比更重。
原文链接: mysql优化之入门部分
网友评论