Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
sp
Member

Откуда:
Сообщений: 3947
Bely
MasterZiv
Если в 5-10% случаях только фамилии НЕ находятся, т.е. 5-10% фамилий
уникальны, а остальные повторяются, да если
248e3 / 50e6 = 0.496 % большой таблицы на каждую фамилию из справочника,
да ещё и на имя и отчество перемножить (ещё меньше будет), так это
ж просто здорово будет.
еще раз повторю...

По именам и отчествам справочник уменьшит размер БД и, возможно, улучшит скорость запросов.
По фамилиям - наврядли. Просто за счет того, что кроме фамилии и индекса по ней надо будет хранить - еще два числа (идентификатор в )

Автору - если запросы по таблице вида:
last_name like 'Абдул%'
то можно задуматься о партиционировании таблицы по первым (первой) букве фамилии.


именно такие запросы и предполагаюцца - а предлагаемый способ с инкесированием вычисляемого поля не спасет Отца Русской (тьфу, хохляцкой) демократии?
3 фев 09, 11:48    [6771405]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
sp
bely
Автору - если запросы по таблице вида:
last_name like 'Абдул%'
то можно задуматься о партиционировании таблицы по первым (первой) букве фамилии.
именно такие запросы и предполагаюцца - а предлагаемый способ с инкесированием вычисляемого поля не спасет Отца Русской (тьфу, хохляцкой) демократии?
Спасет, скорее всего.
Фактически индекс по трем буквам это некая замена партиционирования без физического разделения данных.
3 фев 09, 18:34    [6774532]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34591

Bely пишет:

> Спасет, скорее всего.
> Фактически индекс по трем буквам это некая замена партиционирования без
> физического разделения данных.

Что вы все так любите партицирование ? Чем оно поможет ?
Будет вместо одной таблицы по 50 миллионов 50 по миллиону.
Легче ?

Индекс даёт при поиске O(log N). Ему что 1 миллион, что 50, что 1000 -
всё едино. Нахрена тогда партицировать ?

Posted via ActualForum NNTP Server 1.4

3 фев 09, 19:03    [6774662]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34591

sp пишет:

> а если на справочник фамилий сделать как предлагалось вычисляемое поле с
> left(3), к примеру, и по нему создать индекс??? не усеорит ли это
> выборку по фамилии??

Вы лучше дайте DDL таблицы сюда, запросы (лучше вообще все на эту
таблицу).

Также посмотрите, есть ли в вашем MSSQL индексы по выражениям.
Если нет, то индекс по left(3) сразу же отменяется.
Хотя даже если и есть, я бы так не делал.

Posted via ActualForum NNTP Server 1.4

3 фев 09, 19:06    [6774676]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
MasterZiv
Что вы все так любите партицирование ? Чем оно поможет ?
Будет вместо одной таблицы по 50 миллионов 50 по миллиону.
Легче ?
Легче. А потом еще можно и локальный индекс по партиции построить при необходимости.

MasterZiv
Индекс даёт при поиске O(log N). Ему что 1 миллион, что 50, что 1000 -
всё едино. Нахрена тогда партицировать ?
Ну-ну.
3 фев 09, 23:12    [6775255]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34591

Bely пишет:

> Легче. А потом еще можно и локальный индекс по партиции построить при
> необходимости.

Чем легче-то ?
Вы по миллионной таблице без индекса ходить не будете. Потому что не сможете.

(values (log 50e6) (log 1e6))
17.727533
13.815511

(/ (log 1e6) (log 50e6))
0.77932507 = 70%

итого 30% съэкономили. За что тут бороться -то ?

Posted via ActualForum NNTP Server 1.4

3 фев 09, 23:38    [6775304]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
sp
Member

Откуда:
Сообщений: 3947
MasterZiv

Bely пишет:

> Легче. А потом еще можно и локальный индекс по партиции построить при
> необходимости.

Чем легче-то ?
Вы по миллионной таблице без индекса ходить не будете. Потому что не сможете.

(values (log 50e6) (log 1e6))
17.727533
13.815511

(/ (log 1e6) (log 50e6))
0.77932507 = 70%

итого 30% съэкономили. За что тут бороться -то ?


Я в одном из ответов писал что меня беспокоит долгий первый старт и быстрые последующие - насколько я понимаю долгий старт запроса объясняется загрузкой для использования индекса по колонке с фамилией - если же я вынесу фамилию в справочник соответственно и размер индекса уменьшиться и первый старт ускориться
Или я таки не прав?
4 фев 09, 11:46    [6776761]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
sp
Member

Откуда:
Сообщений: 3947
а еще меня неприятно удивила работа всегото с 50ю миллионами записей SQL сервера:
- изменение типа колонки занимает более 3х часов на 2гигарцевом 2хядерном 2гигабайтном процессоре
- апдейт колонки занимает чутьли не целый день!

как-то подразочаровал миня мелкософт :(
4 фев 09, 13:25    [6777516]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
Наверное было бы уже проще и быстрее протестировать конкретную ситуацию и вынести сюда результаты, чем логикой друг на друга давить.
IMHO, разным случаям - разные подходы, обычно единственное решение не является оптимальным для всех ситуаций, не учитывая исходных данных. Для справочника сотрудников в большинстве случаев бессмысленно разводить ФИО на разные таблицы, а для какой-нибудь БД федерального значения может оказаться вполне разумным решением. Сильно зависит от соотношения уникальных значений от общего их числа, хотя это далеко не единственный критерий.
4 фев 09, 13:37    [6777593]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
sp
меня неприятно удивила работа всегото с 50ю миллионами записей SQL сервера:
- изменение типа колонки занимает более 3х часов на 2гигарцевом 2хядерном 2гигабайтном процессоре
- апдейт колонки занимает чутьли не целый день!

как-то подразочаровал миня мелкософт
Осталось протестировать такими актуальными задачами другие СУБД. Что-то мне подсказывает, что они Вас тоже огорчат.
4 фев 09, 13:40    [6777627]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
sp
Member

Откуда:
Сообщений: 3947
ChA,

после изменения структуры с вынесением ФИО в справочники сообщу об моих впечатлениях :)
4 фев 09, 13:51    [6777745]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
sp
Member

Откуда:
Сообщений: 3947
MasterZiv

Bely пишет:

> Легче. А потом еще можно и локальный индекс по партиции построить при
> необходимости.

Чем легче-то ?
Вы по миллионной таблице без индекса ходить не будете. Потому что не сможете.

(values (log 50e6) (log 1e6))
17.727533
13.815511

(/ (log 1e6) (log 50e6))
0.77932507 = 70%

итого 30% съэкономили. За что тут бороться -то ?


вот кстати информация к размышлению - из 50 миллионов фамилий уникальных оказалось 718 тысяч !!!
4 фев 09, 14:02    [6777856]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
sp
а еще меня неприятно удивила работа всегото с 50ю миллионами записей SQL сервера:
- изменение типа колонки занимает более 3х часов на 2гигарцевом 2хядерном 2гигабайтном процессоре
- апдейт колонки занимает чутьли не целый день!

как-то подразочаровал миня мелкософт :(

вам шашечки или ехать? Быстрый старт или быстрый апдейт? Уберите индексы и журналирование - будет очень быстро
4 фев 09, 14:20    [6778026]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34591

sp пишет:

> объясняется загрузкой для использования индекса по колонке с фамилией -
> если же я вынесу фамилию в справочник соответственно и размер индекса
> уменьшиться и первый старт ускориться

Да при таких объемах расчитывать на кэш нельзя. У вас он всегда
будет переполнен, и его будет не хватать. Так что не смотря
на то, что в этом случае вам помогает именно кэш, в общем
случае он вам не поможет. (частный случай - вы долбите
один и тот же запрос несколько раз. Общий - сначала выполняется
один запрос, потом - другой.).

Posted via ActualForum NNTP Server 1.4

4 фев 09, 19:21    [6780225]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34591

sp пишет:

> а еще меня неприятно удивила работа всегото с 50ю миллионами записей SQL
> сервера:

О народ -то пошёл ! "Всего-то с 50ю миллионами записей".
А с каких объёмов начинаются большие БД, как ты думаешь ?
Ну, у тебя конечно не VLDB, но объёмы это БОЛЬШИЕ.
Ну, скажем так, не детские. Серьёзные. Там любая
операция будет работать долго.

А ты ещё прикинь, что если в центре этих трёх часов
у тебя вырубится электричество, сервак будет часа 2 подниматься,
но данные восстановит.

Posted via ActualForum NNTP Server 1.4

4 фев 09, 19:23    [6780235]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34591

ChA пишет:

> Осталось протестировать такими актуальными задачами другие СУБД. Что-то
> мне подсказывает, что они Вас тоже огорчат.
я в этом уверен на 100% .

Posted via ActualForum NNTP Server 1.4

4 фев 09, 19:25    [6780238]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34591

sp пишет:

> вот кстати информация к размышлению - из 50 миллионов фамилий уникальных
> оказалось 718 тысяч !!!

В смысле, а неуникальных сколько ? А какой коэффициент повторения средний ?

Posted via ActualForum NNTP Server 1.4

4 фев 09, 19:25    [6780244]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34591

Petro123 пишет:

> вам шашечки или ехать? Быстрый старт или быстрый апдейт? Уберите индексы
> и журналирование - будет очень быстро

Вы знаете как на MSSQL убрать журналирование ? Я думал, что это невозможно.

Posted via ActualForum NNTP Server 1.4

4 фев 09, 19:26    [6780246]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
MasterZiv

Petro123 пишет:

> вам шашечки или ехать? Быстрый старт или быстрый апдейт? Уберите индексы
> и журналирование - будет очень быстро

Вы знаете как на MSSQL убрать журналирование ? Я думал, что это невозможно.

а вот это не поможет быстрее шуршать серверу?
https://www.sql.ru/forum/actualthread.aspx?tid=601363&hl=%ec%ee%e4%e5%eb%fc+full#6278232
5 фев 09, 09:32    [6781207]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34591

Petro123 пишет:

> а вот это не поможет быстрее шуршать серверу?

Нет. Это - не как работать, с логом, или без, а как логировать. Так или эдак.
В общем, это всё равно - там разные режимы обрезания лога, но не его
заполнения.

Posted via ActualForum NNTP Server 1.4

5 фев 09, 09:39    [6781235]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
miksoft
Member

Откуда:
Сообщений: 38306
MasterZiv

sp пишет:

> вот кстати информация к размышлению - из 50 миллионов фамилий уникальных
> оказалось 718 тысяч !!!

В смысле, а неуникальных сколько ? А какой коэффициент повторения средний ?
уникальных - это SELECT COUNT(DISTINCT family) FROM table
а "неуникальных" - это как?

"коэффициент повторения средний", имхо, очевидно, 50000000/718000 ~= 70
5 фев 09, 10:15    [6781427]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
sp
Member

Откуда:
Сообщений: 3947
MasterZiv

sp пишет:

> вот кстати информация к размышлению - из 50 миллионов фамилий уникальных
> оказалось 718 тысяч !!!

В смысле, а неуникальных сколько ? А какой коэффициент повторения средний ?


это уникальных 718 тысяч

провел исследования:

имеем такую вот структуру
CREATE TABLE [dbo].[RusO](
	[RusOID] [bigint] IDENTITY(1,1) NOT NULL,
	[RusO] [varchar](50) NOT NULL,
 CONSTRAINT [PK_RusO] PRIMARY KEY CLUSTERED 
(
	[RusOID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[RusI](
	[RusIID] [bigint] IDENTITY(1,1) NOT NULL,
	[RusI] [varchar](50) NOT NULL,
 CONSTRAINT [PK_RusI] PRIMARY KEY CLUSTERED 
(
	[RusIID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[RusF](
	[RusFID] [bigint] IDENTITY(1,1) NOT NULL,
	[RusF] [varchar](50) NOT NULL,
 CONSTRAINT [PK_RusF] PRIMARY KEY CLUSTERED 
(
	[RusFID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[Persons](
	[ID] [bigint] NOT NULL,
	[Sex] [bit] NOT NULL,
	[INN] [varchar](10) NOT NULL,
	[Birthdate] [date] NULL,
	[RusFID] [bigint] NOT NULL,
	[RusIID] [bigint] NOT NULL,
	[RusOID] [bigint] NOT NULL
 CONSTRAINT [PK_Persons] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

В таблицах RusF RusI и RusO созданы уникальные индексы по полям RusF RusI и RusO
Уникальных записей в таблицах:
RusF - 781639
RusI - 72802
RusO - 103352

Вот результаты
Выполнил запрос по редкому ФИО - в Окраине всего одна такая комбинация
SELECT top(50)
	Persons.*
FROM         
	Persons 
	INNER JOIN RusF ON Persons.RusFID = RusF.RusFID 
	INNER JOIN RusI ON Persons.RusIID = RusI.RusIID 
	INNER JOIN RusO ON Persons.RusOID = RusO.RusOID
where
RusF.RusF = 'Бударин' and RusI.RusI = 'Вадим' and RusO.RusO = 'Валерьевич'
Запрос выполнялся 2мин 45сек

Запрос только с RusF.RusF = 'Бударин' - 9сек
запрос с RusF.RusF = 'Бударин' and RusI.RusI = 'Вадим' - 2мин 36сек

Создал вычисляемо еполе в каждой таблице типа left(Field, 3) и создал по ним индексы
Время выполнения запросов с условиями:
- RusF.RusFC = left('Бударин', 3) - 3сек
- RusF.RusFC = left('Бударин', 3) and RusI.RusIC = left('Вадим', 3) - 1мин 8сек
- RusF.RusFC = left('Бударин', 3) and RusI.RusIC = left('Вадим', 3) and RusO.RusOC = left('Валерьевич', 3) - 2мин 24сек

- RusF.RusFC = left('Бударин', 3) and RusF.RusF = 'Бударин' - 0сек
- RusF.RusFC = left('Бударин', 3) and RusF.RusF like 'Бударин%' - 1сек

- RusF.RusFC = left('Бударин', 3) and RusF.RusF = 'Бударин' and
RusI.RusIC = left('Вадим', 3) and RusI.RusI = 'Вадим' - 2мин 36сек

- RusF.RusFC = left('Бударин', 3) and RusF.RusF like 'Будари%' and
RusI.RusIC = left('Вадим', 3) and RusI.RusI like 'Вади%' - 2мин 46сек

Вот такие вот пирожки - т.е. на реальных запросах с 2мя или 3мя полями в условии и с испльзованием вычисляемых полей с индексами по ним не дают никаких преимуществ (

Что делать? Юзер не станет ждать 2мин 45сек чтоб найти человека?
Где можно толковое почитать про партиционирование таблицы с данными?








создал по всем трем таблицам вычисляемое поле left(Field, 3)

при запросе

select * from F where FCalc = left('Иванов', 3)

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

select * from F where FCalc = left('Иванов', 3) and F = 'Иванов'

запрос выполняется ровно столько сколько и по индексированному полу F без вычиляемого поля
Попробовал разные комбинации индексов - результат один - запрос выполняется не быстрее чем по индексу по полу F
17 май 09, 20:31    [7190606]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
miksoft
Member

Откуда:
Сообщений: 38306
sp,

Так у вас же MS SQL.
17 май 09, 21:10    [7190654]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
sp
Member

Откуда:
Сообщений: 3947
miksoft
sp,

Так у вас же MS SQL.


да, а что?
17 май 09, 21:26    [7190682]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше: индекс по столбцу или создание справочника?  [new]
miksoft
Member

Откуда:
Сообщений: 38306
sp
miksoft
sp,

Так у вас же MS SQL.


да, а что?
Сорри, попутал. По привычке решил, что тема в подфоруме по MySQL :)
17 май 09, 21:29    [7190688]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить