如何优化此查询以更快地获得结果?

时间:2012-07-27 07:28:01

标签: php mysql

我有这个查询,我执行了很多次。你能建议如何优化这个吗?索引已经应用于表格。

SELECT
    DISTINCT b.appearance_id,
    b.photo_album_id,
    b.eventcmmnt_id,
    b.id,
    b.mem_id,
    b.subj,
    b.body,
    b.date,
    b.parentid,
    b.from_id,
    b.visible_to,
    b.image_link,
    b.post_via,
    b.youtubeLink,
    b.link_image,
    b.link_url,
    b.auto_genrate_text
FROM
    bulletin b
INNER JOIN
    network n
ON
    ( n.mem_id = b.mem_id )
WHERE
    b.parentid = '0' AND 
    '$userid' IN (n.frd_id, b.mem_id))
GROUP BY
    b.id
ORDER BY
    b.date DESC
LIMIT
    0,20

1 个答案:

答案 0 :(得分:1)

network.frd_idnetwork.mem_idbulletin.mem_id都已编入索引吗?如果不是,如果表格中有更大的数量,你就会陷入混乱。

另外,and ('$userid' IN (n.frd_id, b.mem_id))在成本方面很糟糕。如果可能,您应始终坚持=!=等。是否可以将此行替换为and ('$userid' = n.frd_id or '$userid = b.mem_id)

最后,如果你在记录方面看一些重要的卷,重新订购表可能是一个很大的胜利。我在工作中运行一些繁重的数据库,其中包含由键值标识的大量数据。通常,我想将这些值汇总到某个级别。我发现偶尔运行alter table someTableName order by col1, col2;将记录分组到可能聚合或筛选在一起的块中会大大改善。