Что быстрее?Умножение в коде или умножение в SQL? - PullRequest
2 голосов
/ 01 марта 2011

Вопрос:

Что быстрее: Умножение 2 удваивается в таблице SQL и возвращает таблицу, или возвращает таблицу и умножает два значения столбца в коде?

Вы можете предположить, что два столбца, которые нужно умножить, должны быть возвращены в любом случае.

Ответы [ 6 ]

2 голосов
/ 01 марта 2011

Умножение - это чрезвычайно быстрое вычисление, и то, что микросхему предлагается сделать это из SQL или из других мест, не должно иметь никакого значения. Вероятно, в SQL это ускорится то, что это можно сделать за один проход (хотя это зависит от того, как SQL реализует его), где, как если бы вы делали это в коде, вы должны циклически просматривать набор результатов, но опять вы можете делать это в любом случае.

Реальный ответ, хотя это действительно не имеет значения, если вы не планируете умножать десятки миллионов чисел за раз.

1 голос
/ 01 марта 2011

Единственный раз, когда я видел процесс SQL намного медленнее, чем собственный код , это когда выполнялись чрезмерные полномочия и журналы.Почему, я не знаю, так как ЦПУ выполняет одинаковую работу в любом случае.

Единственная возможная причина в том, что T-SQL является скриптовым языком.Вы никогда не упоминали, какой язык используете.

Как уже упоминали другие, тестируйте.

Реальный ответ - выполнять математику только для записей, которые в ней нуждаются.Этого вы должны достичь с помощью SQL.

Конечно, в крайнем случае вы можете использовать SSE (или AVX с Sandy Bridge) в нативном коде, что, конечно, даст значительно более быстрые результаты.Я не верю, что SQL Server сможет применять такие оптимизации.

1 голос
/ 01 марта 2011

SQL быстрее, если вы

  • , используя соответствующие типы данных с эффективной аппаратной арифметикой ( больше )
  • , используя эффективное объединение / просмотр.

и вообще - избегать полей с разделителями ( больше )

0 голосов
/ 16 апреля 2015

Ответ заключается в том, чтобы сделать это в коде, потому что СУБД может быть неправильной. Известно, что SQL Server ошибается, потому что он не подчиняется коммутативному закону математики.

Попробуйте и обратите внимание на страшную разницу между двумя результатами: выберите 1,0 * 3/2 выберите 3/2 * 1,0

0 голосов
/ 01 марта 2011

В этом случае SQL включите Mulitply как часть оператора select при получении набора результатов.Если вы делаете в коде, то вам придется перебирать набор результатов отдельно, что потребует много времени.

С другой стороны, если вы просто возвращаете два значения и хотите их умножить, не имеет значения, является ли его код или sql:)

0 голосов
/ 01 марта 2011

SQL, если вы все делаете правильно!

...