【发布时间】:2012-04-10 08:22:10
【问题描述】:
我在大型 mysql MyISAM 表上的 php 中查询很慢:
select p.*, m.*, d.*
from datafeeds as d,
products as p left outer join meta as m on p.mykey = m.mykey
where p.datafeed_id = d.id and "keyword"
该表有 300 万条记录,在某些情况下,此搜索查询最多需要 50 秒。
如果能提供优化查询和/或表和索引的提示,我将不胜感激。
datafeed_id 有索引 BTREE mykey_index 有索引 BTREE
我尝试了 EXPLAIN EXTENDED:
解释扩展选择 p。 * ,米。 *,d。 * FROM 数据馈送 AS d,产品 AS p LEFT OUTER JOIN meta AS m ON p.mykey = m.mykey 其中 p.datafeed_id = d.id AND“关键字”
id |选择类型 |表|类型 |可能的键 |关键 | key_len |参考 |行 |额外的 1 |简单 |空 |空 |空 |空 |空 |空 |空 |不可能在哪里【问题讨论】:
-
如果您继续从每个表中选择 *,您将不会获得任何性能提升
-
致其他人:WHERE 中的 p & d 关系是否会导致任何放缓,或者只是当时的风格?
-
也许你应该看看codereview.stackexchange.com
-
你能发一个
$name_clause的例子吗? -
还有左外连接痛到!我们可以看到表结构吗?需要知道哪些键已被索引以及您在 $name_clause 中跳过哪些键