2013-04-21 72 views
1

我有一个查询朗MySQL查询

SELECT * 
    FROM tbl_auction_listing 
    JOIN tbl_user ON tbl_auction_listing.user_id = tbl_user.user_id 
    JOIN tbl_subject ON tbl_auction_listing.subject_id = tbl_subject.subject_id 
    JOIN tbl_medium ON tbl_auction_listing.medium_id = tbl_medium.medium_id 
    JOIN tbl_style ON tbl_auction_listing.style_id = tbl_style.style_id 
WHERE tbl_auction_listing.item_number = '2736503389’ 

这是造成一些问题,该网站的速度,有时会到现场崩溃的地步。将它分成多个查询会更好吗?

指标

tbl_auction_listing 0 PRIMARY 1 auction_listing_id A 18739    BTREE  
tbl_auction_listing 1 Listing - subject_id 1 subject_id A 32   YES BTREE  
tbl_auction_listing 1 Listing - medium_id 1 medium_id A 32   YES BTREE  
tbl_auction_listing 1 Listing - style_id 1 style_id A 38   YES BTREE  
tbl_auction_listing 1 Listing - colour_id 1 colour_id A 30   YES BTREE  
tbl_auction_listing 1 Listing - user_id 1 user_id A 1441    BTREE  
tbl_auction_listing 1 Listing - price_id 1 price_id A 20   YES BTREE  
tbl_auction_listing 1 Listing - status 1 status A 8   YES BTREE  
+0

你的索引是什么?解释计划是什么?你真的需要从所有这些表中选择_everything_吗? – Ben 2013-04-21 12:50:48

+0

另外,什么是长轮询部分?你是在无限循环中执行这个查询还是什么?这肯定会导致任何服务器崩溃。 – 2013-04-21 12:52:41

+0

是的,我确实需要从所有表格中选择数据。并不是所有的信息,但5个表中的3个都有2列或3列。 – puks1978 2013-04-21 12:53:45

回答

2

您可以:
1.增加默认的HTTP请求超时Web服务器
2.建立在tbl_auction_listing.item_number指数
3.缓存一些这些表的经常不太容易改变
4.增加应用程序和db服务器上的sql查询超时时间
5.非规范化数据库

+0

点2的+1。 – 2013-04-21 13:14:15

0

不,您最好将这个查询分解为多个查询。

将索引添加到数据库以加快查询会更好。每个子表的主键都应该有一个索引。例如,tbl_style应具有tbl_style(style_id)等的索引。

您的索引是“错误的方向”。他们应该在参考表上,而不是(或不只)在主表上。

+0

嗨,是的,他们也是。 – puks1978 2013-04-21 13:01:56