查询性能优化

来源:互联网 发布:linux tar gzip 编辑:程序博客网 时间:2024/05/21 10:03

查询性能优化

基本原则

1.查明应用程序是否获取超过需要的数据.意味你访问了过多的行或列

2.查明Mysql服务器是否分析了超过需要的行.

1.向服务器请求了不需要的数据

一些查询先向服务器请求了不需要的数据,然后再丢掉它们.这给服务器造成了额外的负担,增加了网络开销,消耗了内存和CPU资源.常见的错误有..

提取超过需要的列

使用select语句选择很多行,却只提取最开始的N.比如说,提取新闻前100条最新的新闻,但只在首页只显示10解决这个问题的最好办法是使用limit了句.

多表联接(Multitable Join)时提取所有列

 如果要选择电影Academy Dinosaur中的所有男演员,不要使用下面的查询:

Select * from sakila.actor inner join sakila.film_actor using(actor_id)

Inner join sakila.film using(film_id) where sakila.film.title = 'Academy Dinosaur';

这个查询返回了所有表中的所有列,正确的方式应该是这样:

Select sakila.actor.* from sakila.actor inner join sakila.film_actor using(actor_id)

Inner join sakila.film using(film_id) where sakila.film.title = 'Academy Dinosaur';

提取所有的列

要对使用select * 始终怀疑态度.真的需要所有的列吗?也许不是.获取所有列将会造成覆盖索引(Covering Index)这样的优化手段失效,也会增加磁盘I/O,内存和CPU的开销.


当然请求超过需要的数据也不总是坏事.开发人员使用这种浪费的方式可以简化开发,增加代码的复用性.如果我们明白这个道理,在系统出现故障的时候也该知道如何去优化.

如果应用程序使用了某种缓存机制,那么这对获取超过实际需要的数据是很有好处的.运行大量只获取对象部分数据的单个查询时,要优先考虑获取对象的全部信息,然后缓存起来.

原创粉丝点击