如何快速查询

时间:2012-03-21 07:28:22

标签: mysql

我正在使用下面提到的查询,每个表中有大约400,000条记录,大约需要10~12秒才能得到结果。有什么方法可以让它更快。

查询:

select url_details.title, url_details.summary, url_details.id from urls,
url_details where urls.status='' AND urls.keyword_id='2791' AND
url_details.url_id=urls.id

5 个答案:

答案 0 :(得分:1)

为您通常比较的键创建INDEXES。这将大大减少时间

答案 1 :(得分:0)

首先,您必须在表格上定义键

urls(habe定义了一个带有status和keyword_id的索引):

ALTER TABLE `urls` ADD INDEX `index_keyword_status`(`keyword_id`, `status`);

和urls_details.url_id必须是外键或索引

你的选择:

SELECT
url_details.title,
url_details.summary,
url_details.id
FROM urls
INNER JOIN url_details
    ON url_details.url_id=urls.id
WHERE urls.keyword_id = 279
    AND LENGTH(urls.status) = 0

答案 2 :(得分:0)

首先,您应该更好地使用连接语法:

select url_details.title, url_details.summary, url_details.id from urls join urls_details using(url_id)  where urls.status='' AND urls.keyword_id='2791' 

你还需要在urls.status上有一些索引,url_id和keyword_id。 如果你在每张桌子上有4 000 000条记录,我猜它仍然会有点慢。

答案 3 :(得分:0)

几乎所有mysql性能问题的答案都是索引。 如果您知道要为所有查询过滤这三个变量,请添加跨越这三个字段的复杂索引。

http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html

如果你不知道将过滤哪些索引,那么为每个字段添加一个简单的索引,并依赖于mysql的“索引合并”优化。

http://dev.mysql.com/doc/refman/5.0/en/index-merge-optimization.html

答案 4 :(得分:0)

不仅创建索引还能解决所有问题。 您可以优化表结构并删除冗余索引(如果有)。 我正在使用SQLyog,其中包含“查询资料工具”。这将让你知道你的查询执行是如何发生的,逐步查询执行的方法(典型的布局看起来像这样),它也有“计算最佳数据类型”。和'查找冗余索引'这可以让你优化你的表结构,我希望这个工具可以帮助你。  enter image description here