Я быстро создавал прототип 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, а в том, чтобы сказать,мне, почему это так быстро.
Build Time: 0 ms
Редактировать: Я выполнил тест 10000 раз с 20 терминами, и это заняло около 10 секунд, так что около 1/ 10 миллисекунд.Теперь, когда я думаю об этом, совершенно очевидно, что это не так уж много для вычислений, если я не начну получать действительно длинные строки.