WEB开发网
开发学院数据库MySQL 查询性能的优化 - 查询慢的基础知识:优化数据访问... 阅读

查询性能的优化 - 查询慢的基础知识:优化数据访问

 2009-09-02 00:00:00 来源:WEB开发网   
核心提示:一个查询执行的不是很理想,大部分原因都是由于数据量过大,查询性能的优化 - 查询慢的基础知识:优化数据访问,很多查询都筛选了大量的数据并且并没有什么作用,其实大部分不好的语句都可以访问更少的数据,最好的方案是在查询后加上LIMIT条件,在表的多连接查询中获取所有的列 如果你想获取所有出现在Academy Dinosau

一个查询执行的不是很理想,大部分原因都是由于数据量过大。很多查询都筛选了大量的数据并且并没有什么作用。其实大部分不好的语句都可以访问更少的数据。我们可以通过两个步骤来分析性能差的查询语句。

找出你的应用程序所获取的数据是否超出了你的需求。意思就是它访问了过多的数据,但是它也可能访问了过多的列。

找出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...;

1 2 3 4  下一页

Tags:查询 性能 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接