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

Откуда: Лазаревское
Сообщений: 575
AlexeyMish
alexeyvg
пропущено...
Рискованно такое предлагать...
ТС может быть не в курсе про все запросы в системе...
Хотя да, такой индекс пока видится идеальным, судя по описанию.

Про запросы я достаточно в курсе.
Фактически система представляет из себя набор приложений которые занимаются ТОЛЬКО вставкой в базу.
Все работы по выборке данных и работе с ними лежат на мне.
Учитывая, время и сроки за которые провели допиливание системы с firebird до MS SQL вероятность того, что разрабы занимались тюнингом индексов я оцениваю как предельно малую.
Строго говоря, чуть выше я сам пришел к мысли, что этот индекс надо пересоздать, просто с формулировкой у меня не очень. Ибо не специалист.
автор
в моем случае кластерный индекс лучше накладывать на поле не GLOBAL_ID, а сделать покрывающий кластерный индекс (если я правильно понял термины), на поля Global_ID+Datetime.
Суждение сформировано исходя из рекомендации:


Итак, если я решусь на этот шаг. Мне нужно будет
1)удалить PK
автор
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[I_STATISTICS_CALL_IN]') AND name = N'PK_I_STATISTICS_CALL_IN')
ALTER TABLE [dbo].[I_STATISTICS_CALL_IN] DROP CONSTRAINT [PK_I_STATISTICS_CALL_IN]
GO

2) Создать новый
автор
ALTER TABLE [dbo].[I_STATISTICS_CALL_IN] ADD CONSTRAINT [PK_I_STATISTICS_CALL_IN] PRIMARY KEY CLUSTERED
(
[DATETIME], [GLOBAL_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO


Предварительно помолившись и создав бекап.
Все верно?


Создаётся впечатление, что есть проблемы в проектировании системы.

Что важнее: вставка данных или выборка данных?

Важнее вставка - надо меньше индексов, если время вставки критично.
26 ноя 13, 21:31    [15194542]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Веrd
Member

Откуда: Лазаревское
Сообщений: 575
ZOOKABAKODER
AlexeyMish, вставлю свои пять копеек.
Попробуйте воспользоваться Database Tuning Advisor, насколько я осведомлён, штука очень неплохая. Но честно признаюсь, сам не пользовался, не дошли руки.

И ещё: вы по английски нормально читаете? В msdn всё очень складно по вашей проблеме описано, причём, я всё чаще там же вижу очень неплохие переводы. Это дело одного выходного дня...

PS: После того как местная детвора начала спорить с тем, что зеркальная база лучше копии бекапа, я, ожидая очередной виток подростковой истерии, хочу предупредить, что кормить троллей не намерен. У меня много дел...

О чём тут спор? - это разные вещи.
26 ноя 13, 21:33    [15194548]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Веrd
Member

Откуда: Лазаревское
Сообщений: 575
AlexeyMish
AnyKey45,
Я признаюсь в том, что сделал глупую вещь которую сейчас перепишу, так как стало стыдно. :(

declare @GLOBAL_IDmin (bigint)
declare @GLOBAL_IDmax (bigint)

declare @DT1 float
declare @DT2 float

set @DT1=Convert(float,Convert(datetime,'20131120'))
set @DT2=Convert(float,Convert(datetime,'20131125'))

Select @GLOBAL_IDmin =@min(Global_ID), GLOBAL_IDmax=ax(GLOBAL_ID) from INFDATA_STAT.dbo.I_STATISTICS_CALL_IN
where DATETIME	between @DT1 and @DT2

Select * from from INFDATA_STAT.dbo.I_STATISTICS_CALL_IN
where GLOBAL_ID between GLOBAL_IDmin  and GLOBAL_IDmax


Хм, хранить дату во Float...
Всегда думал, что MS SQL по SMALLDATETIME работает быстрее, чем по FLOAT...
26 ноя 13, 21:40    [15194567]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
AlexeyMish
Но в свойствах БД, Auto Update Statistics чем занимается?
Статистика обновляется автоматически при изменении не меньше 20% данных. Это для вашей таблицы произойдет через 4 месяца. (24М*20% = 4.8М и 4.8М/40К=120 дней). Так что я бы посоветовал делать это регулярно вручную.
26 ноя 13, 22:00    [15194628]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
[quot AlexeyMish]
ZOOKABAKODER
Насчет бекапов и зеркалирования - это сравнивать теплое с мягким, я вроде как из юношеского максимализма вырос.

Веrd
О чём тут спор? - это разные вещи.

Забудте, это я о своём...

AlexeyMish
Кстати, раз пошла такая пьянка, может быть подскажете по моему второму [url=]https://www.sql.ru/forum/1061533/problemy-s-zerkalirovaniem-mirroring-ms-sql-2008r2[/url] посту что-нибудь?

не подскажу...

Веrd
Хм, хранить дату во Float...
Всегда думал, что MS SQL по SMALLDATETIME работает быстрее, чем по FLOAT...

[SMALL]DATETIME ничего общего не имеет с FLOAT - их бинарный формат это целые числа. Если надо получить улучшение в работе с датами используйте DATE, TIME и DATETIME2.


AlexeyMish, поищите "MSSQL determine unused indexes" - там запрос есть чтоб это смотреть, "mssql query tuning" - имхо так статья в msdn иназывается.
26 ноя 13, 22:41    [15194819]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AlexeyMish
Member

Откуда:
Сообщений: 71
Веrd ,

Эта база статистики поступающих телефонных вызовов.
Время на вставку не особо критично, по крайней мере проблем вызванных слишком долгой вставкой пока не ловил и не похоже, что это вскоре может стать узким местом.
Естественно, статистика нужна не для того, чтобы она просто была, а для того, чтобы по ней работать. Проводить анализ, смотреть результаты, наказывать невиновных, награждать непричастных и прочая. А вот тут у меня не все гладко с производительностью. Ибо запросы работают не слишком быстро и люди которые проводят этот анализ жалуются, что получение результатоы отчетов не слишком быстро. Именно эту проблему я и хочу если не решить, то снизить ее остроту.

ZOOKABAKODER,
Благодарю. Буду смотреть
27 ноя 13, 08:27    [15196082]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31486
Веrd
Хм, хранить дату во Float...
Всегда думал, что MS SQL по SMALLDATETIME работает быстрее, чем по FLOAT...
Точности SMALLDATETIME может не хватить.

А DATETIME занимает те же 8 байт, как и FLOAT.
В принципе для сервера неважно, DATETIME и FLOAT будут использоваться одинаково эффективно, просто это неудобно, ну и недоступна некоторая функциональность типа DATETIME (не говоря о том, что приходится использовать программирование методом тыка, допустим, прибавляя 1 для прибавления суток).
Azik23
alexeyvg
Просто интересно - почему используется тип float вместо datetime?
Это же неудобно.
Вы знаете что физически из себя представляет тип DATETIME в любом языке?
Думаю, в разных языках по разному, все языки в мире не знаю :-)
Очень (самый?) распространённый вариант - 100-наносекундные тики начиная от Р.Х.

А что?
27 ноя 13, 08:52    [15196144]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31486
AlexeyMish
Select @GLOBAL_IDmin =@min(Global_ID), GLOBAL_IDmax=ax(GLOBAL_ID) from INFDATA_STAT.dbo.I_STATISTICS_CALL_IN
where DATETIME	between @DT1 and @DT2

Select * from from INFDATA_STAT.dbo.I_STATISTICS_CALL_IN
where GLOBAL_ID between GLOBAL_IDmin  and GLOBAL_IDmax
Двойной запрос тут точно лишний, об этом уже написали.
27 ноя 13, 09:01    [15196176]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
AlexeyMish
Member

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

Так я и сам признался, что понял, что эта концепция в корне не верна и уже исправился. )
Я же написал, что стало стыдно. )
27 ноя 13, 09:03    [15196181]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с построением индексов.  [new]
Azik23
Member

Откуда:
Сообщений: 11
alexeyvg
Веrd
Хм, хранить дату во Float...
Всегда думал, что MS SQL по SMALLDATETIME работает быстрее, чем по FLOAT...
Точности SMALLDATETIME может не хватить.

А DATETIME занимает те же 8 байт, как и FLOAT.
В принципе для сервера неважно, DATETIME и FLOAT будут использоваться одинаково эффективно, просто это неудобно, ну и недоступна некоторая функциональность типа DATETIME (не говоря о том, что приходится использовать программирование методом тыка, допустим, прибавляя 1 для прибавления суток).
Azik23
пропущено...
Вы знаете что физически из себя представляет тип DATETIME в любом языке?
Думаю, в разных языках по разному, все языки в мире не знаю :-)
Очень (самый?) распространённый вариант - 100-наносекундные тики начиная от Р.Х.

А что?


Вот, приятно, коллега :)

100 x 10^-9 = 1 x 10^-7

мот все таки 1000-наносекундные? :)
27 ноя 13, 13:11    [15197975]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / Microsoft SQL Server Ответить