我正在使用下面提到的查询,每个表中有大约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
答案 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,其中包含“查询资料工具”。这将让你知道你的查询执行是如何发生的,逐步查询执行的方法(典型的布局看起来像这样),它也有“计算最佳数据类型”。和'查找冗余索引'这可以让你优化你的表结构,我希望这个工具可以帮助你。 )