查询性能的优化 - 查询慢的基础知识:优化数据访问
2009-09-02 00:00:00 来源:WEB开发网一个查询执行的不是很理想,大部分原因都是由于数据量过大。很多查询都筛选了大量的数据并且并没有什么作用。其实大部分不好的语句都可以访问更少的数据。我们可以通过两个步骤来分析性能差的查询语句。
找出你的应用程序所获取的数据是否超出了你的需求。意思就是它访问了过多的数据,但是它也可能访问了过多的列。
找出MySQL服务器是否分析了过多的行。
从数据库获得的数据是否超出了你的需要?
一些查询语句获取了很多不需要的数据,之后再把它们扔掉。这就需要MySQL服务器做额外的工作,加重了网络的负担,并且消耗了应用服务器的内存和CPU资源。
下面都是一些常见的错误。
获取了不需要的行
一个最常见的错误就是MySQL要提供所需的数据,而不是计算并且返回所有的数据集。我们看到在熟悉其他数据库的人设计的应用程序中,这种错误常常发生。这些开发人员常常用SELECT获取很多行,之后再取前N行,并且关闭了数据集。他们可能考虑到MySQL会提供10行并且中止了查询的执行,但是MySQL真正所做的时候生成了完整的结果集。客户端库获取了所有的行并且抛弃了很多行。最好的方案是在查询后加上LIMIT条件。
在表的多连接查询中获取所有的列
如果你想获取所有出现在Academy Dinosaur影片中的演员,不要写如下的语句
mysql> 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';
这个查询语句会返回这三个表的所有列。正确的语句如下:
mysql> SELECT sakila.actor.* FROM sakila.actor...;
更多精彩
赞助商链接