如何优化MySQL查询?

时间:2010-06-27 05:15:31

标签: sql mysql database database-design

我目前正在使用带有PHP的mysql,因为这是我学到的东西,而且从来没有使用过任何其他东西。在我目前的项目中,我有一个拥有1000万行和大约10列的数据库,当我在本地(windows)环境以及生产(linux)环境中进行复杂调用时,发现它非常慢。两台服务器都有超过10GB的内存。我已经安装了Zend AMF,因此所有数据传输都是二进制的。

我是自学成才,从来没有人教过我高效的dbm的来龙去脉。我的第一个想法是将数据库分解成块然后更改我所有的PHP代码。看起来像很多麻烦并且在PHP代码中出错...是否有更好的方法我不知道?

我的用户界面是基于闪存的,我愿意更改中间件,如果它意味着速度的显着提高。在这一点上,我真的只知道PHP作为中间件。

我不想在这一点上学习另一个数据库并且认为必须有一些技巧才能优化我的表现但是想在我攻击我的数据库之前得到一些想法。

fyi:数据库只能从用户的角度来读取。用户不会将任何新数据输入数据库。此外,在数据库中的1000万行中,只有大约200,000行被大量使用。 (我不知道哪些200K行被大量用作录制,这些信息可能会减慢我的数据库速度。)

每次通话都是这样的:

SELECT   name, id, address 
FROM     table 
WHERE    date_added=? 
LIMIT    ?,? 
ORDER BY no_children ASC

......以及其他各种“选择”陈述。

2 个答案:

答案 0 :(得分:3)

date_added字段上有index吗?如果没有,请创建一个,然后重试:

CREATE INDEX ix_date_added on table (date_added);

您可能还有兴趣查看MySQL参考手册中的以下文章:

您还应该尝试在SELECT语句前使用EXPLAIN,以查看查询是否会使用您的任何索引。这通常是正确排除性能问题的第一步。

答案 1 :(得分:0)

这个答案也是@Daniel Vassallo的回答:

CREATE INDEX ix_date_added_no_children on table (date_added, no_children);

更正确