MySQL优化-----从最简单的语句优化开始

今天学习了一下MySQL的优化的内容,做下笔记先。MySQL可以从多个方面进行优化,SQL语句的优化,数据库结构优化,索引优化,存储引擎优化等。今天就说一下SQL语句的优化,我们经常会用用到以下语法的sql:

select ... from ... where ....

我们知道,如果采用ID查询的话可以非常快地将一条记录查询出来,但是也有很多情况下我们只用到其他列去查询,这时候MySQL会进行全表扫描,全表扫描是非常耗时的。如何进行优化呢?对于简单的query当然是加索引啦,那么索引怎么加?加在哪里?对于初学者来说这个是个问题。那么哪些列需要加索引呢,答案是where 语句中用到的列例如:

<pre name="code" class="sql">select * from student where stu_name = 'zhangsan';

 以上的语句中如果stu_name没有加索引,那么就需要给它加一个索引,问题是怎么知道它有没有加索引?使用explain 关键字: 

explain select * from student where stu_name = 'zhangsan';

explain 关键字可以打印出sql语句运行时的执行计划,也就是MySQL如何去解释并且执行这个sql。以下是一個例子:



以上就是一个sql的执行计划,关于每个值的意思可以到官网查看官方文档http://dev.mysql.com/doc/refman/5.7/en/explain-output.html。我们现在主要看possible_keys,key

在没有索引的情况下这两个字段为空,并且查询所需时间为0.19


加上索引之后这两个字段保存的是索引的名称,查询时间为0.09因为数据量不是很大,所以差别不是特别明星,但是也可以看到加上索引之后为我们带来的性能提升。对于大表来说,应该尽量避免全表扫描,索引的目的就为了避免全表扫描。另外所以对于联表查询,或者使用到外键时就更加重要了。


接下来说一下函数调用的,函数调用怎么优化?其实主要是对函数作用的范围的优化,也就是说你调用的函数是对整个表还是对一个结果集,一般情况下我们会对结果集调用一个函数,如果对全表调用那就太耗时了。

使用analyze table语法定期更新统计表,这样优化器才能得到最新信息去执行制定一个执行计划,语法如下:

ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE
    tbl_name [, tbl_name] ..

学了这一点点算是优化MySQL的一个开始了吧,后续还有很多相关的优化,例如对于sql的优化还可以通过调整缓存池的大小,调整表的存储引擎类型,多个session访问表时锁的问题。








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值