MSSQL — выберите значения NULL в столбце varbinary

Я пытаюсь сделать выбор в таблице с примерно 35 000 строк, один из столбцов представляет собой varbinary, который может иметь некоторые значения NULL, и мне нужно исключить эти значения NULL из моих результатов.

Проблема в том, что когда вы делаете выбор в столбце varbinary, это занимает много времени, я нашел способ, который я не уверен, что могу использовать, или это лучший способ сделать что-то подобное, и я хотелось бы несколько мнений.

Вот:

SELECT REQUEST,REQLOCATION,DESCRIPT,BLOBNAME,BLOBSIZE,substring(BLOBVALUE,0,1) AS BLOBVALUE,BLOBMODE,BLOBPATH,BLOBID,
REDIRID,ANALYST,CLIENT,SEVENT,PACKAGE,INSERTDATE
FROM REQBLOB WHERE substring(BLOBVALUE,0,1) IS NOT NULL

Столбец varbinary — это столбец «BLOBVALUE», в котором я делаю выбор «substring», и этот запрос мгновенно дал мне результат в 20 000 строк, и я думаю, что он вернул только действительные данные, а не NULL, что вы думаете об этом?


person Juninho Bill    schedule 26.02.2019    source источник


Ответы (1)


Избавьтесь от SUBSTRING в WHERE, это сделает ваш запрос недоступным для SARG; вот почему это медленно.

SELECT REQUEST,
       REQLOCATION,
       DESCRIPT,
       BLOBNAME,
       BLOBSIZE,
       SUBSTRING(BLOBVALUE, 0, 1) AS BLOBVALUE,
       BLOBMODE,
       BLOBPATH,
       BLOBID,
       REDIRID,
       ANALYST,
       CLIENT,
       SEVENT,
       PACKAGE,
       INSERTDATE
FROM REQBLOB
WHERE BLOBVALUE IS NOT NULL;

Почему вы все равно используете подстроку в varbinary?..?

person Larnu    schedule 26.02.2019
comment
На самом деле выполнение подстроки в предложении where не замедляет запрос, это занимает много времени, если я не использую подстроку в запросе. - person Juninho Bill; 26.02.2019
comment
@JuninhoBill SUBSTRING, скорее всего, замедлит ваш запрос в WHERE. Если ваш запрос по-прежнему медленный, это говорит о том, что ваш запрос возвращает огромный набор данных, и у вас нет индексов, которые помогут вашему механизму обработки данных. Верна ли эта догадка? - person Larnu; 26.02.2019
comment
Да, вы правы, у нас есть огромный набор данных без индексов, и я пытаюсь решить эту проблему без создания индексов, если это возможно, я не уверен в этом, и поэтому я сделал этот пост здесь ... Спасибо! - person Juninho Bill; 26.02.2019
comment
@JuninhoBill Вы можете ознакомиться с предложениями плана выполнения. - person Suraj Kumar; 26.02.2019
comment
Ну, тогда твоя проблема, @JuninhoBill. Если у вас огромный набор данных и нет индексов, которые могли бы помочь обработчику данных, он прибегает к полному сканированию таблицы; конечно, это будет мне медленно. Если бы я дал вам книгу в 10 000 страниц, где все страницы были перемешаны, и попросил вас вернуть мне только страницы между 1000 и 2000, как вы думаете, вы могли бы сделать это быстро? А если бы они были заказаны? Держу пари, ваши ответы очень разные. это то же самое для вашего механизма данных. - person Larnu; 26.02.2019
comment
Почему вы против построения индексов? Вот в чем настоящая проблема. - person Larnu; 26.02.2019
comment
@ Ларну, да, ты абсолютно прав, и я это знаю, просто подумал, есть ли способ заставить это работать так, как я думал ... - person Juninho Bill; 26.02.2019
comment
@Larnu Да, теперь я думаю о создании индексов, просто пытаюсь понять, есть ли другой способ... Большое спасибо!! - person Juninho Bill; 26.02.2019