我有两个具有相同列名的表。我想在其中搜索。我已经研究并意识到使用function showMoreLogs() {
var revealed = 0;
$('.order-table').each(function() {
var $this = $(this);
if ($this.is(':hidden') && revealed < 10) {
$(this).show();
revealed++;
}
});
var hidden = $('.order-table').filter(":hidden").size();
if (hidden > 0) {
if (hidden == 1) {
$('#more-orders').html('Get 1 More Change Logs');
} else if (hidden <=5) {
$('#more-orders').html('Get ' + hidden + ' More Change Logs.');
} else {
$('#more-orderd').html('Get 10 More Change Logs');
}
} else {
console.log("Hidden: ", hidden);
$('#more-orders').hide();
}
return false;
}
比UNION ALL
(在速度和性能方面)更好。现在我想知道是否找不到结果,INNER JOIN
还好吗?
我认为JOIN关键字的算法是:如果在第一个表中找不到结果,则操作停止(在第二个表中,搜索不会)。但UNION ALL
在任何情况下搜索所有表格。我认为是对的?如果我的想法是对的,那么当找不到结果时UNION ALL
会更好吗?
指出:col被索引(phpmyadmin)。
如果找不到结果,哪一个有更好的性能?
INNER JOIN
VS
SELECT col FROM table1 WHERE col='test'
UNION ALL
SELECT col FROM table2 WHERE col='test';
答案 0 :(得分:2)
UNION ALL
通常更快。它不需要任何复杂的查找。它只是结合了两个查询结果。在INNER JOIN
的情况下,是否从两个表中查询数据在很大程度上取决于数据库,更不用说具体细节(使用的索引等)。
那就是说,你的查询根本就不一样了。如果两个表都包含这样的记录,则UNION ALL
的版本将返回两行,如果任一表包含匹配,则仍将返回一行。
如果两个表都包含匹配的记录,则INNER JOIN
的版本仅 将返回一行,如果只有其中一个(或没有)包含匹配的记录,则不会返回一行
注意,INNER JOIN
的{{1}}使用了未列别的列col
,这可能会导致错误。
总的来说,不要根据理论开始优化。写出清晰易读的查询,尽可能地应用于这种情况(语义正确)。只在需要时进行优化。
另外,请注意不要优化错误的东西。即使INNER JOIN
版本在没有找到数据的情况下会稍微快一点,UNION ALL
版本仍然会闪电般快,所以最好选择更适合您的版本。确实有一场比赛。