Как получить результат считать как «около хх строк»? - PullRequest
1 голос
/ 02 ноября 2010

То, что я ищу, это вернуть некоторую оценку количества строк вместо фактического количества, которое может быть дорогим вызовом.Подобно тому, что вы видите в поиске Google ( ... из о 1000 строк ).

Существуют ли какие-либо готовые решения для этого?Если нет, то каков общий подход?

Я запрашиваю базу данных Sql Server 2008.

РЕДАКТИРОВАТЬ : Для пояснения счетчик результатов относится к определенным запросам пользователей.Например, пользователь ищет «Джон», и в результате должно получиться «Есть около 1.280.000 строк, которые соответствуют Джону»

Ответы [ 6 ]

5 голосов
/ 02 ноября 2010

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

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

, например

SET SHOWPLAN_XML ON;
SELECT Something
FROM MyTable
WHERE SomeField = 'ABC123'

Затем проверьте возвращенный XML, чтобы извлечь значение 'EstimateRows'.

1 голос
/ 02 ноября 2010

Отдельно от моего другого ответа, так как это совершенно другой ответ, который вы можете просто использовать из TSQL ....

Другой возможностью было бы использование предложения TABLESAMPLE для просмотра только указанного числа (или процента) страниц данных, а затем умножения его на *. 1005 *

, например

SELECT COUNT(*)
FROM MyTable TABLESAMPLE(50 PERCENT)
WHERE SomeField = 'ABC123'

Будет необходимо настроить размер выборки. Я рекомендую полностью прочитать справку BOL , поскольку это может быть очень полезно.

1 голос
/ 02 ноября 2010

Общий подход состоит в том, чтобы взять случайную выборку строк, чтобы оценить, сколько их на самом деле. Например, если ваши идентификаторы были UUID, вы можете выполнить фильтр в вашем операторе выбора, который создаст случайную выборку. Так что вы можете просто посмотреть на строки с идентификатором, начинающимся с "f". Затем умножьте счет на 16, чтобы получить оценку для количества строк. Вам нужно будет создать индекс, чтобы это было быстро, хотя.

1 голос
/ 02 ноября 2010

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

SELECT rows FROM sysindexes WHERE id = OBJECT_ID('sometable') AND indid < 2

Это было взято из предыдущего поста, расположенного здесь:1004 *

Действительно ли счет (*) действительно дорог?

1 голос
/ 02 ноября 2010

Трудно сказать, что вы спрашиваете.Если вы говорите о возврате числа из алгоритма поиска, вы можете вычислить хеш из входных данных, а затем использовать этот хеш для сопоставления с числом, которое вы периодически поддерживаете.Это может дать вам «о» правильных результатах, в зависимости от того, насколько хорош хеш и как часто вы обновляете свои значения.

0 голосов
/ 02 ноября 2010

Vlejkoz, на основании ваших дальнейших обновлений выясняется, что вы ищете общий алгоритм текстового поиска, а не то, что я предполагаю, это ваши текущие дорогие таблицы поиска и объединения.

В SQL Server у вас есть полная структура для именно этого, она называется Microsoft Full Text Search и предоставляет вам дополнительные возможности запросов. Это предоставляет вам синтаксис поиска, гораздо более похожий на традиционный поиск в Google в стиле нечетких стилей, но специализированный для таблиц вашей базы данных.

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

Статья полнотекстового поиска Microsoft

...