如何加快针对MyISAM表的庞大查询的速度?
|
该查询针对单个表。该表具有60个称为\“ attribute1 \”到\“ attribute60 \”的属性,它们都是类型:
varchar(255)
还有一个名为\“ brand_id \”的列,即:
int(11)
表中存在以下密钥:
brand_id, attribute1, attribute2, attribute3
查询如下:
SELECT distinct attribute1
from brands b inner join product_applications pa on pa.brand_id = b.id
where b.id in (1,372,373,374,375,376,378,381,452,
453,454,455,456,457,458,461,474,476,
544,480,563,508,512,513,516,517,519,520,521,
522,524,525,527,528,529,533,538,539,540,542,
546,547,548,555,556,557,642,643,644,645,646,
647,648,649,650,651,652,653,654,655)
这需要10秒钟以上。该表有5,735,673行。
此查询所需的时间不超过2秒。我无法弄清楚如何编写它,或者如果我需要某种替代表结构,则无法做到这一点。谁能提供推荐?
我曾经在WHERE子句中使用IN,但是在另一个论坛中建议使用这种丑陋的方法来加快连接速度。我真的不知道这意味着什么,但是它速度更快,但仍然非常慢。
+ ---- + ------------- + ------- + ------- + -------------- -------------------------- + -------------------- +- ------- + ----------- + ------- + ---------------------- --------------------- +
| id | select_type |桌子|类型可能的钥匙|关键key_len |参考|行|额外|
+ ---- + ------------- + ------- + ------- + -------------- -------------------------- + -------------------- +- ------- + ----------- + ------- + ---------------------- --------------------- +
| 1 |简单b |范围|主要|主要| 4 | NULL | 60 |在哪里使用使用索引;使用临时|
| 1 |简单pa |参考| brand_search_index,parttype_search_idx | brand_search_index | 5 | mcp5.b.id | 57356 |在哪里使用使用索引
+ ---- + ------------- + ------- + ------- + -------------- -------------------------- + -------------------- +- ------- + ----------- + ------- + ---------------------- --------------------- +
设置2行(0.04秒)
没有找到相关结果
已邀请:
2 个回复
浮凰量
我认为这会更快-它肯定更干净-但是,如果没有,您可能需要添加一些有关索引的细节,也许是EXPLAIN QUERY等。
硕歌沙
例如
您想要获取指定品牌列表的独特产品类别集。但是您有超过500万种产品,因此仅凭一张桌子就无法立即完成。通常处理此问题的方法是拥有多个相关表:
然后,您的查询将是这样的: