我正在快速原型制作一个SQL查询,但没有按照正确的方式进行操作,而是决定使用一堆字符串拼接来完成,一直认为这样会非常慢,但并不重要,因为我只是在测试查询。令我惊讶的是,Java说这段代码只需要0毫秒就能完成?使用+
比使用StringBuilder
或类似方法不是需要更长时间吗?
long t = System.currentTimeMillis();
String load = "";
for (String s : loadFields)
load += s + ", ";
String sql = "SELECT ";
sql += load + "sum(relevance) AS 'score' " +
"FROM ( ";
for (int i = 0; i < searchFields.length; i++) {
sql += "SELECT ";
sql += load;
sql += rels[i] + " AS relevance FROM articles WHERE " +
searchFields[i];
sql += " LIKE '%" + terms[0] + "%' ";
for (int z = 1; z < terms.length; z++)
sql += "AND " + searchFields[i] + " LIKE '%" + terms[z] + "%' ";
if (i != searchFields.length - 1) sql += " UNION ALL ";
}
sql += ") results GROUP BY " + load.substring(0, load.length() - 2) + " ";
sql += "ORDER BY score desc, date desc";
System.out.println("Build Time: " + (System.currentTimeMillis() - t) + " ms");
是的,这很丑陋,但重点不在于解释SQL,而在于告诉我为什么速度如此之快。
构建时间:0毫秒
编辑:我运行了10000次测试,每次使用20个术语,大约需要10秒钟,因此大约为1/10毫秒。现在我想起来了,除非我开始使用非常长的字符串,否则这并不需要太多计算。