Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 MySQL内部与左连接顺序不同_Php_Mysql - Fatal编程技术网

Php MySQL内部与左连接顺序不同

Php MySQL内部与左连接顺序不同,php,mysql,Php,Mysql,为什么这两个查询具有相同的ORDER BY时返回不同的结果集 查询中唯一的区别是,我第一次加入用户内部,大约需要5秒钟。 我第二次使用左连接,用了0.05秒。在这两种情况下,它们返回的行数都是43000行,但tck.id的顺序不同,我不知道为什么或者以哪种方式返回 SELECT tck.*, acc.ac_name FROM support_tickets tck INNER JOIN support_ticket_accounts acc USING (id_support_ticket_

为什么这两个查询具有相同的ORDER BY时返回不同的结果集

查询中唯一的区别是,我第一次加入用户内部,大约需要5秒钟。 我第二次使用左连接,用了0.05秒。在这两种情况下,它们返回的行数都是43000行,但tck.id的顺序不同,我不知道为什么或者以哪种方式返回

SELECT tck.*, acc.ac_name
FROM support_tickets tck  
INNER JOIN support_ticket_accounts acc USING (id_support_ticket_account)
WHERE tck.id_company = 2 AND tck.st_status = 1 ORDER BY tck.st_priority DESC
编辑:


如果您只是按tck.st_priority DESC排序,则可以为这两种情况(左侧或内部)返回多个不同的记录集。这是因为您必须有许多具有相同的
st_优先级的记录
,因此它们中的任何一个都可以不按特定顺序出现
在order by子句中添加更多字段,以提供任何记录唯一的可能位置,您将在两个查询中拥有相同的顺序。

我认为延迟是由这些字段造成的(但我不明白为什么一个查询需要这样做,而另一个查询不需要这样做)。我认为创造应该有帮助:

CREATE INDEX filter 
    ON support_tickets(id_company, st_status, st_priority)
    USING BTREE;

where为nothing的左连接将作为内部连接,就时间而言,它可能是查询缓存。尝试先使用左连接,然后使用内部连接,并查看所用的时间。能否为两个查询提供
EXPLAIN
的输出?@AbhikChakraborty
acc
上没有WHERE条件,除非指定,否则返回行的顺序是任意的(即使看起来不是这样)。此外,我认为使用是令人困惑的(尤其是在较大的查询上)。我避开它。我用解释编辑了这篇文章@草莓,谢谢你的澄清。所以基本上我必须添加另一个订单才能得到我想要的?我在某个地方读到过,使用速度更快,但我也更喜欢编辑部分。在这种情况下,它不会影响性能。我仍然想知道为什么mysql“优化”第二个查询需要5秒钟:-/
CREATE INDEX filter 
    ON support_tickets(id_company, st_status, st_priority)
    USING BTREE;