MySQL查询优化
问题描述:
我有连接查询,似乎缓慢提取。我如何优化它,或者它合理吗?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
这里的解释输出
答
望着解释输出,你的问题是在
第二行:与表t1
的加入。
将指数放在t1.specific_product_id
和t2.specific_product_id
之间。
第一行有一行3行,using filesort
这实际上比使用索引快,因为它节省了I/O时间。
以下代码将添加一个索引到t2.specific_product_id
。
ALTER TABLE table_product ADD INDEX spi(specific_product_id);
因为你只有29行的输出,使用索引应加快查询到瞬间。
答
如果哟ü要了解查询的性能问题,只需使用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,则需要索引。主要用于WHERE
或GROUP BY
或ORDER BY
语句中使用的列。 “额外”告诉你关于资源消耗(CPU或内存)的操作。
因此,在“ownned_id”(我认为应该是“owned_id”)上添加一个索引并再次解释。然后看性能增益。
如果您遇到问题,我可以帮助您更好地粘贴EXPLAIN输出。
答
通过看你的解释表,类型都这是非常糟糕的,如果你有超过10 000行中的表。我在你的餐桌强烈建议索引此列
- t1.specific_product_id
- t2.specific_product_id
- t3.user_id
- t1.user_id
如果您应该表达到10 000排,你应该能够看到性能提升。有关更多信息,请在00:00到02:04分钟之间播放此视频,因为您可以在下面的视频中查询索引之前必须搜索超过90000行数据,并在索引之后搜索少于5行的数据我会帮你的。
你能告诉我们索引了哪些列吗?桌子有多大? – stevevls 2011-05-14 11:23:06
您是否需要'SQL_CALC_FOUND_ROWS',因为没有指定'LIMIT'? – Alec 2011-05-14 11:26:08
@alec:我认为没有理由为它是不带'LIMIT' – Nanne 2011-05-14 11:27:42