Почему функции, не связанные с БД, в SQL Server намного медленнее? - PullRequest
2 голосов
/ 08 октября 2009

Я всегда слышу, что не связанные с БД функции (например, сравнение строк, циклы) в SQL Server работают медленно, потому что, ну, это база данных. Но почему именно этот факт заставляет эти методы ползти по сравнению с полноценными языками программирования?

Ответы [ 3 ]

1 голос
/ 08 октября 2009

Сравнение строк не медленнее, чем в любой скомпилированной программе, но обычно вы сравниваете много строк (скажем, каждую строку в таблице), и это медленно.

Что касается циклов: БД не является компилятором. Он читает ваш SQL, а затем интерпретирует его. Если бы вы могли посылать скомпилированный код и выполнять его БД, вы бы не заметили разницу в скорости, но БД должна интерпретировать один и тот же код снова и снова.

Если вам повезет, БД преобразует цикл во некоторую внутреннюю форму (байт-код или структуру данных), но это а) занимает больше времени, чем просто наведение процессора на какой-то код, и б) ему все еще нужно работать больше кода для интерпретации байтового кода или структуры данных. Для циклов он должен оценивать условия для каждого раунда.

1 голос
/ 08 октября 2009

Реляционная база данных оптимизирована для работы в наборах. Что-нибудь вроде курсора, цикла или коррелированного подзапроса, требующего, чтобы база данных работала построчно, будет медленнее, часто мучительно медленно. Замена этого кода на код, основанный на наборе (тот тип базы данных, который предназначен для лучшей обработки), часто улучшает производительность с часов до миллисекунд.

0 голосов
/ 08 октября 2009

Поскольку они интерпретируются, а не компилируются в инструкции машины / процессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...