Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
sqlmiha1
Member

Откуда:
Сообщений: 28
есть mssql 2012 база "словарь слов" - один столбец и миллиард строк каждая длиной до 128 байт
файл 100гб
как оптимизировать к ней запросы по скорости вида
select "слово" from base
?
15 апр 14, 02:17    [15882780]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
SERG1257
Member

Откуда:
Сообщений: 2752
http://technet.microsoft.com/en-us/library/ms142571.aspx
15 апр 14, 03:52    [15882818]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
sqlmiha1,

сделать PK не пробовали?
15 апр 14, 09:05    [15883124]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
sqlmiha1
как оптимизировать к ней запросы по скорости вида
select "слово" from base

Оптимизировать выборку 1 млрд строк нельзя
15 апр 14, 09:06    [15883129]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
sqlmiha1
есть mssql 2012 база "словарь слов" - один столбец и миллиард строк каждая длиной до 128 байт
файл 100гб
как оптимизировать к ней запросы по скорости вида
select "слово" from base
?

Добавьте поле, куда поместите целочисленный хэш от "слова" HASHBYTES('MD5', 'слово') , поставьте на это поле индекс и по нему ищите.
Чисто теоретически существует вероятность совпадения двух хешей, поэтому я бы еще добавил еще одно поле SOUNDEX('слово') взяв от него только 3 последние цифры.
Можно сделать одно вычисляемое поле из этих двух с результирующим типом int или bigint.
15 апр 14, 11:06    [15883797]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
насчет SOUNDEX сказал ерунду... не обрабатывает оно русские слова
15 апр 14, 11:22    [15883878]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
SQL2008,

чем это всё лучше просто уникального индекса на поле?
Экономия места? Про проблемы с местом нам никто не говорил.
15 апр 14, 11:29    [15883926]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
Как то так
CREATE TABLE [dbo].[TableWord](
	[word] [varchar](128) NOT NULL,
	[key]  AS (CONVERT([bigint],hashbytes('MD5',[word]),0)) PERSISTED
) ON [PRIMARY]


Но на всякий случай проверять перед выполнением запроса, что
SELECT COUNT(1) FROM [dbo].[TableWord] = CONVERT([bigint],hashbytes('MD5','слово']),0)

равно 1, иначе сохранять результат запроса
SELECT [word] INTO #t FROM [dbo].[TableWord] = CONVERT([bigint],hashbytes('MD5','слово']),0)

и из него уже делать прямой поиск
SELECT [word] FROM #t WHERE [word] = 'слово'
15 апр 14, 11:35    [15883958]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
iap
чем это всё лучше просто уникального индекса на поле?

Я предполагаю (могу конечно ошибаться) что поиск по ключу текстового поля будет очень длительным.
15 апр 14, 11:36    [15883961]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
Невнимательно прочитал тему... речь идет не о поиске, а об оптимизации выборки.
15 апр 14, 11:41    [15883983]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
SQL2008
Невнимательно прочитал тему... речь идет не о поиске, а об оптимизации выборки.
Причём явный ляп, на который обратил внимание Glory, - ничем неограниченной выборки.
Кто-то хочет прочитать весь миллиард строк, и быстро!
15 апр 14, 11:45    [15884006]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
хмхмхм
Guest
sqlmiha1
как оптимизировать к ней запросы по скорости вида
select "слово" from base
?


ограничить выборку с помощью инструкции top? Иначе, боюсь, никак.
15 апр 14, 11:48    [15884030]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
хмхмхм
sqlmiha1
как оптимизировать к ней запросы по скорости вида
select "слово" from base
?


ограничить выборку с помощью инструкции top? Иначе, боюсь, никак.
SELECT TOP(0) слово FROM base
Так?
15 апр 14, 11:52    [15884058]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
а если нафигачить 32 фильтрованных индекса, по одному на букву - быстрее не будет?)
15 апр 14, 11:55    [15884086]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
iap
SQL2008
Невнимательно прочитал тему... речь идет не о поиске, а об оптимизации выборки.
Причём явный ляп, на который обратил внимание Glory, - ничем неограниченной выборки.
Кто-то хочет прочитать весь миллиард строк, и быстро!

Просим ТС уточнить для чего это нужно?
15 апр 14, 12:01    [15884112]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
AnyKey45
а если нафигачить 32 фильтрованных индекса, по одному на букву - быстрее не будет?)

Если не определен даже критерий, в каком порядке выбирать записи, то лучше вообще никаких индексов!
Прочитать быстро быстрее всего [scan table]. Любый индексы, упорядочивающие записи будут вносить задержки.
15 апр 14, 12:04    [15884128]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
хмхмхм
Guest
iap
хмхмхм
пропущено...


ограничить выборку с помощью инструкции top? Иначе, боюсь, никак.
SELECT TOP(0) слово FROM base
Так?


SELECT TOP 100 слово FROM base
Order by слово 


При условии, что на колонке есть индекс.
15 апр 14, 12:12    [15884184]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
хмхмхм

SELECT TOP 100 слово FROM base
Order by слово 


При условии, что на колонке есть индекс.

Вы также попали в плен собственных заблуждений как и я...
Где говорится о порядке выборки? Или о количестве строк?
Тупо хочется "все и быстро".
15 апр 14, 12:15    [15884202]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
SQL2008
хмхмхм

SELECT TOP 100 слово FROM base
Order by слово 



При условии, что на колонке есть индекс.

Вы также попали в плен собственных заблуждений как и я...
Где говорится о порядке выборки? Или о количестве строк?
Тупо хочется "все и быстро".
Самое быстрое - TOP(0)!
15 апр 14, 12:26    [15884263]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
хмхмхм
Guest
Да тут еще автор хочет искать это слово:

sqlmiha1
DPH3,

столбец один - слово до 128 байт
выбор слов по маске *слово*
записей нет
только чтения до сотни-тысячи в секунду (может больше)
смотри пока mssql / mongodb


Т.е.

like '%слово%'
15 апр 14, 13:17    [15884654]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
хмхмхм
Да тут еще автор хочет искать это слово:

sqlmiha1
DPH3,

столбец один - слово до 128 байт
выбор слов по маске *слово*
записей нет
только чтения до сотни-тысячи в секунду (может больше)
смотри пока mssql / mongodb


Т.е.

like '%слово%'
Вот, кстати, непонятно, почему эта помойка называется "словарь"?
Я почему-то думал, что одно слово на одной строке...
15 апр 14, 13:25    [15884721]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
sqlmiha1
как оптимизировать к ней запросы по скорости вида
select "слово" from base
Что нужно то? Оптимизировать выборку всех записей из таблицы без фильтров/условий?

Если вы не можете описать задачу по русски, приведите пример данных и примеры запросов. Не забывая про тег SRC
15 апр 14, 17:15    [15886480]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
iap
Я почему-то думал, что одно слово на одной строке...
Скорее всего так и есть, но мало ли, что имеет в виду ТС.
15 апр 14, 17:16    [15886490]     Ответить | Цитировать Сообщить модератору
 Re: есть mssql 2012 база "словарь слов" - один столбец и миллиард строк  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
sqlmiha1,

select * from tbl

здесь оптимизация может быть - компрессия кластерного индекса (кучи)... исходя из условия выбрать ВСЕ )))) ну или columnstore index, который впрочем тоже сжат.

PS: звездочка по причине: в условии у Вас 1 поле... поэтому результат одинаков что со звездочкой что с названием поля.
15 апр 14, 17:34    [15886619]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить