这两个查询中的哪一个在MySQL和/或ORACLE中表现更好?
-preemptedAMContainers
-preemptedNonAMContainers
-preemptedResources='<memory:0\, vCores:0>'
或
db.yourCollection.aggregate({ $group: { _id : null, sum : { $sum: "$amount" } } });
我对第二种感觉很强烈,但是我想确定。
答案 0 :(得分:2)
SELECT *
FROM User
WHERE name LIKE "%searchTerm%"
OR lastname LIKE "%searchTerm%"
OR email LIKE "%searchTerm%";
此查询更好,然后是第二个。因为如果您想在所有字段上使用不同过滤器,则可以轻松使用它们。
SELECT *
FROM User
WHERE CONCAT(name, " ", lastname, " ", email) LIKE "%searchTerm%";
在此查询中,您不能使用其他过滤器。 您必须在所有字段上使用通用过滤器。
答案 1 :(得分:1)
首先,这两个查询不等同。如果在 searchTerm 中使用空白(连接分隔符),则第一个查询可能不匹配,但第二个查询可以匹配,因为匹配跨越两到三列。
性能将与两个查询都进行全表扫描时非常相似,而区别仅在于过滤条件
首次查询
1 - filter("NAME" IS NOT NULL AND "NAME" IS NOT NULL AND "NAME" LIKE
'%searchTerm%' OR "LASTNAME" IS NOT NULL AND "LASTNAME" IS NOT NULL AND
"LASTNAME" LIKE '%searchTerm%' OR "EMAIL" IS NOT NULL AND "EMAIL" IS
NOT NULL AND "EMAIL" LIKE '%searchTerm%')
第二个查询
1 - filter("NAME"||' '||"LASTNAME"||' '||"EMAIL" LIKE '%searchTerm%')
因此,基本上这两个查询都不适合在非平凡表上进行客户搜索。
您通常希望将搜索限制为可以使用索引的column LIKE 'xxxxxx%'
。
答案 2 :(得分:0)
(MySQL答复)
这两种方法都将涉及全表扫描,因此两者都不快。 (获取行比评估表达式更昂贵。)此外,前导通配符意味着必须对字符串进行完全扫描;无法使用INDEX
。
如果您的“ serachTerm”始终是单词,则使用FULLTEXT(name, lastname, email)
和MATCH(name, lastname, email) AGAINST ("+searchTerm" IN BOOLEAN MODE)
;将会很多更快。