0

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

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
4

1 回答 1

1

和所有network.frd_id的索引?如果不是,如果表中有一些较大的卷,您将陷入混乱。network.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;将记录分组到可能被聚合或筛选在一起的块中会产生巨大的改进。

于 2012-07-27T07:33:34.297 回答