SQL Сервер Быстрый способ определить, если существует - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно найти быстрый способ определить, существуют ли записи в таблице базы данных. Обычный метод IF Exists (условие) не достаточно быстрый для моих нужд. Я нашел что-то, что быстрее, но работает не совсем так, как задумано.

Обычный ЕСЛИ существует (условие), которое работает, но слишком медленно для моих нужд:

IF EXISTS (SELECT * 
           From dbo.SecurityPriceHistory
           Where  FortLabel = 'EP'
           and    TradeTime >= '2020-03-20 15:03:53.000'
           and    Price >= 2345.26)

Моя работа не работает, но очень быстра:

IF EXISTS (SELECT IIF(COUNT(*) = 0, null, 1)   
           From   dbo.SecurityPriceHistory
           Where  FortLabel = 'EP'
           and    TradeTime >= '2020-03-20 15:03:53.000'
           and    Price >= 2345.26)

Проблема со вторым решением заключается в том, что когда count (*) = 0, возвращается значение null, но это приводит к тому, что IF EXISTS (null) возвращает true.

Второе решение быстро, потому что он не читает никаких данных в плане выполнения, в то время как первый действительно читает данные.

Ответы [ 3 ]

1 голос
/ 23 марта 2020

Я предложил оставить исходный код без изменений, но добавить индекс для покрытия одного (или нескольких) столбцов в предложении WHERE.

Если я что-то изменил, я мог бы ограничить SELECT предложение к одному ненулевому маленькому столбцу.

0 голосов
/ 23 марта 2020

Для этого запроса:

IF EXISTS (SELECT * 
           From dbo.SecurityPriceHistory
           Where  FortLabel = 'EP' and
                  TradeTime >= '2020-03-20 15:03:53.000' and
                  Price >= 2345.26
          )

Вам нужен индекс для:

  • SecurityPriceHistory(Fortlabel, TradeTime, Price)
  • SecurityPriceHistory(Fortlabel, Price, TradeTime)

Разница в том, является ли TradeTime или Price более избирательным. Индекс из одного столбца, вероятно, недостаточен для этого запроса.

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

0 голосов
/ 23 марта 2020

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

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