Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何优化此查询以更快地从中获得结果?_Php_Mysql - Fatal编程技术网

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

Php 如何优化此查询以更快地从中获得结果?,php,mysql,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.po

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

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

network.frd\u id
network.mem\u id
bulletin.mem\u id
是否都已编制索引?如果没有,如果表中有一些较大的卷,您将处于混乱状态

另外,
和((n.frd\u id,b.mem\u id)中的“$userid”
在成本方面非常糟糕。如果可能,您应该始终坚持使用
=
=等等。是否可以将此行替换为
和('$userid'=n.frd\u id或'$userid=b.mem\u id)


最后,如果您正在查看一些重要的记录量,那么重新排序表可能是您的一大胜利。我在工作中运行一些繁重的数据库,其中包含由键值标识的大量数据。通常,我希望将这些值聚合到某个级别。我发现偶尔运行
altertablesometablename命令,按col1,col2
将记录分组到可能被聚合或筛选在一起的块中,这是一个巨大的改进。

起点:按b.id分组到底是为了什么?您似乎没有使用任何聚合。“分组方式”可能很昂贵。由此得出的结论是:确保为所有加入的列编制索引。是否可以增加查询缓存大小?@user1551419添加了另一个关于重新排序表的部分。