2011-05-14 176 views
0

我有连接查询,似乎缓慢提取。我如何优化它,或者它合理吗?MySQL查询优化

的时间来执行
29总计,查询花费1.6956秒

MySQL查询

SELECT SQL_CALC_FOUND_ROWS 
    t2.AuctionID ,t2.product_name ,t3.user_name ,t1.date_time ,t1.owned_price 
    ,t2.specific_product_id 
FROM table_user_ownned_auction AS t1 
INNER JOIN table_product AS t2 ON t1.specific_product_id=t2.specific_product_id 
INNER JOIN table_user_information AS t3 ON t3.user_id=t1.user_id 
ORDER BY ownned_id DESC 

这里的解释输出

Explain output

+1

你能告诉我们索引了哪些列吗?桌子有多大? – stevevls 2011-05-14 11:23:06

+2

您是否需要'SQL_CALC_FOUND_ROWS',因为没有指定'LIMIT'? – Alec 2011-05-14 11:26:08

+0

@alec:我认为没有理由为它是不带'LIMIT' – Nanne 2011-05-14 11:27:42

回答

0

望着解释输出,你的问题是在 Explain output

第二行:与表t1的加入。
将指数放在t1.specific_product_idt2.specific_product_id之间。

第一行有一行3行,using filesort这实际上比使用索引快,因为它节省了I/O时间。

以下代码将添加一个索引到t2.specific_product_id

ALTER TABLE table_product ADD INDEX spi(specific_product_id); 

因为你只有29行的输出,使用索引应加快查询到瞬间。

+0

如何将索引添加到specific_product_id字段。它的已经是primary_key。我不知道任何关于index.untill know.help我! – Gowri 2011-05-14 12:32:59

+0

@gowri,更新了答案以包含添加索引的语句。 – Johan 2011-05-15 16:57:49

0

如果哟ü要了解查询的性能问题,只需使用EXPLAIN关键字查询的面前:

EXPLAIN SELECT SQL_CALC_FOUND_ROWS 
    ,t2.AuctionID ,t2.product_name ,t3.user_name ,t1.date_time ,t1.owned_price 
    ,t2.specific_product_id 
FROM table_user_ownned_auction AS t1 inner 
JOIN table_product AS t2 ON t1.specific_product_id=t2.specific_product_id 
INNER JOIN table_user_information AS t3 ON t3.user_id=t1.user_id 
ORDER BY ownned_id DESC 

它会告诉你有关查询重要信息。最重要的栏目是“关键”和“额外”。

如果“key”为NULL,则需要索引。主要用于WHEREGROUP BYORDER BY语句中使用的列。 “额外”告诉你关于资源消耗(CPU或内存)的操作。

因此,在“ownned_id”(我认为应该是“owned_id”)上添加一个索引并再次解释。然后看性能增益。

如果您遇到问题,我可以帮助您更好地粘贴EXPLAIN输出。

+0

任何问题,您能解释一下..这里是解释输出http://awesomescreenshot.com/0ceczlte5 – Gowri 2011-05-14 11:48:00

+0

我如何能指标ownned_id列其已经primary_key和经销商的增量 – Gowri 2011-05-14 11:55:31

+0

主要手段,它索引,也是绝无仅有的。所以不需要为它添加另一个索引。关于你的EXPLAIN输出的解释请看Johan的答案。 – Alp 2011-05-14 12:33:30

0

通过看你的解释表,类型都这是非常糟糕的,如果你有超过10 000行中的表。我在你的餐桌强烈建议索引此列

  1. t1.specific_product_id
  2. t2.specific_product_id
  3. t3.user_id
  4. t1.user_id

如果您应该表达到10 000排,你应该能够看到性能提升。有关更多信息,请在00:00到02:04分钟之间播放此视频,因为您可以在下面的视频中查询索引之前必须搜索超过90000行数据,并在索引之后搜索少于5行的数据我会帮你的。

https://www.youtube.com/edit?o=U&video_id=ojyEcNMAj8k