Почему этот SQL-оператор является очень медленным?

Обычно время работы вычисляется в ежегодном основании. Таким образом, если у Вас есть Соглашение об уровне обслуживания для 99,95%, это означает:

365 * 0.0005 = 0.1825 days or 4.38 hours

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

С Вашего вопроса, мне не остановили сервер, работающий в EC2 приблизительно на 3 месяца теперь. Я сказал бы, что их время работы хорошо, но если у Вас есть важное приложение, у Вас определенно должно быть решение обработки отказа. Хорошее время работы только означает, что они смогут ответить на отключение электричества быстро. Даже время работы на 99,9999% не сможет сохранить Вас, если Вы не будете подготовлены к отключению электричества.

8
задан Muxa 18 August 2009 в 05:47
поделиться

2 ответа

или , как известно, работает медленно на SQL Server. Это, мягко говоря, досадно.

Попробуйте разделить его на два запроса с помощью объединения :

WITH AllProducts AS (
  select *, Row_Number() OVER (ORDER BY ProductId) AS RowNumber
  from (
  SELECT       p.*
  FROM        Product AS p 
    WHERE p.IsEnabled=1 AND
      p.BaseSku = 'KPK-3020QWC-C' 
  UNION
  SELECT       p.*
  FROM        Product AS p 
    WHERE p.IsEnabled=1 AND
      CONTAINS(p.FreeTextStrings, '"KPK-3020QWC*"')
  )
) SELECT * FROM AllProducts        
  WHERE RowNumber BETWEEN 1 AND 20;
11
ответ дан 5 December 2019 в 14:05
поделиться

Кажется, это хорошо работает:

WITH AllProducts AS (
  SELECT       p.*, Row_Number() OVER (ORDER BY ProductId) AS RowNumber
  FROM        Product AS p 
    WHERE p.IsEnabled=1 AND
    (
      CONTAINS(p.BaseSku, 'KPK-3020QWC-C') /* instead of p.BaseSku = 'KPK-3020QWC-C' */
      OR
      CONTAINS(p.FreeTextStrings, '"KPK-3020QWC*"')
    )
) SELECT * FROM AllProducts        
  WHERE RowNumber BETWEEN 1 AND 20;

(у меня уже был индекс BaseSku FTS)

1
ответ дан 5 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: