|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
Приветствую всех! Есть запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Поле field1 - строка переменной длины, field2 - дата и время. Как видно в запросе нет условий, только агрегатная функция. Подскажите, какой индекс может ускорить выборку, если вообще индекс сможет помочь при таком запросе? Если индекс бесполезен, то как можно ускорить выполнение запроса? P.s. SQL- Sybase 9. С уважением Vector. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 07:15 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
Vector, мы же не Java ускорять будем? В СУБД-форуме есть средства, которые покажут - использует ли оптимизатор БД вообще индексы при данном запросе. - или нужно вместо индексов убрать часть записей \ добавить оперативки авторЕсли индекс бесполезен, то как можно ускорить выполнение запроса? профилировать запрос на всех этапах в секундах ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 09:31 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
Vector, Да, наверное, подойдет обычный B-индекс на field1 и на field2 (хотя, в зависмости от селективности field1, индекс на field2 возможно и не нужен). Вообще-же про такие вещи надо не спрашивать, а сначала самому посмотреть, что происходит в профилеровщике. Если не секрет, причем здесь JAVA? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 09:42 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
Да, я в основном общаюсь в этом форуме. Ну и по привычке запостил это сообщение сюда. Я уже написал модератору просьбу переместить этот пост в форум Sybase. А по теме. Профилирование не возможно, так как SQL сервер не наш. У нас нет инструментов для профилирования. Все что нам доступно - это некоторые таблицы. Подключение происходит с использование jdbc драйвера от Sybase - собственно все, что у нас есть. Насколько я знаю инструментарий к Sybase не бесплатно раздается. Хотелось просто услышать, может кто-нибудь уже сталкивался с такой же задачей. Мы могли бы попросить владельца SQL сервера добавить индекс на таблицу. Но вопрос в том - какой? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 09:50 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
VectorПодключение происходит с использование jdbc драйвера от Sybase - собственно все, что у нас есть. Насколько я знаю инструментарий к Sybase не бесплатно раздается. Хотелось просто услышать, может кто-нибудь уже сталкивался с такой же задачей. Мы могли бы попросить владельца SQL сервера добавить индекс на таблицу. Но вопрос в том - какой?Если владелец не хочет ускорения, то и вам оно не нужно, а если хочет - то пусть предоставит доступ к тестовому стенду. PS некоторые СУБД от Sybase раздаются бесплатно или бесплатно для разработчиков (некоммерческое применение). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 10:23 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
VectorНо вопрос в том - какой? ну это гадание на кофейной гуще. Искать надо где "тонко", а не где светло. Просто так, от фонаря, индекс замедлит работу и может НЕускорить выборку. ЗЫ. А как вы вообще пишите вслепую? Без тестовых данных и окружения. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 10:58 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
To Petro123 У нас есть Документ, который описывает структуру данных, которые нам доступны на SQL сервере, компании, предоставляющей нам процессинговую услугу. Мы можем читать из некоторых таблиц, и записывать данные в некоторые таблицы. И все. И еще у нас есть драйвер. В принципе, они не обязаны по нашему требованию вводить изменения в свою БД. Они отвечают лишь за ее наполнение. Только благодаря личным отношениям, они готовы пойти навстречу. Вот и все. У нас нет купленного сервера, у нас нет инструментов для его администрирования и настройки. И т.п. Нас удручает скорость работы определенных запросов. Хотелось бы улучшить результаты. К примеру есть запрос с блоком WHERE. По нашей просьбе был введен доп. индекс, который обеспечил нам 100 кратный прирост по скорости нашего запроса. Хотя, конечно, он оказывает некоторое замедление при загрузке данных (предположение). С запросом с блоком WHERE понятно, куда можно двигаться. Вопрос же касается конкретно запроса без блока WHERE с агрегатной функцией. Возможно существуют стандартный подход к построению индекса при использовании агрегатных функций. Мне он не знаком. Потому и спрашиваю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 11:13 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
VectorВозможно существуют стандартный подход к построению индекса при использовании агрегатных функций. Мне он не знаком. Потому и спрашиваю.а вы уверены что возможна агрегация с применением индекса? мне казалось, что если не ограничивать выборку Н-количествоам (скажем 1000), то СУБД должна перелопатить ВСЮ таблицу и в результат выдать агрегат по ВСЕМ данным. Чисто по логике это долго... может попробовать выкачивать таблицу к себе целиком и сделать OLAP? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 11:30 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
в данном конкретном случае индекс по field1 и field2 конечно ускорит выборку (а на больших объёмах очень сильно ускорит). Чем гадать - скачайте сайбейз ломаный - установите локально, создайте точно такую же структуру как на продакшне (структуру-то базы вы в состоянии получить) - наполните тестовыми данными (сгенерируйте рандомные сходного объёма) и тестируйте нагрузку у себя. На этом же форуме есть раздел по сайбейзам ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 11:31 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
Vector, в том то и дело, что решений миллион. Всё равно нужны цифры и аргументы Т.к. оракл например, строит статистику ваших запросов и свои временные индексы (подстраивается под вас) Дополнительно вы не знаете , какие индексы там уже есть :)) (опять же оракл их сам добавляет при DDL создания FK \ PK и таблицы) Однозначных решений нет. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 11:44 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
Добрый день, Petro123! > Т.к. оракл например, строит статистику ваших запросов и свои временные > индексы (подстраивается под вас) Какие временные индексы? > Дополнительно _вы не знаете_, какие индексы там уже есть :)) > (опять же оракл их сам добавляет при DDL создания FK \ PK и таблицы) При создании FK индексы не создаются. Сколько при этом возникает спецэффектов- можно рассказывать долго, но не здесь. > Однозначных решений нет. В любом случае- все решения тут офтопик. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 11:50 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
GKS_Samara, - кустарно выразился ... собирает статистику http://www.sql.ru/forum/actualthread.aspx?tid=558258&hl=%f1%f2%e0%f2%e8%f1%f2%e8%ea%e0+%e8%ed%e4%e5%ea%f1%fb - ты прав (счас глянул) - строит только по PK ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 12:22 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
В общем понятно. ПО поводу выборки всего наборы в память и потом среза по измерениям (OLAP) - это вариант самый тяжелый, так как потребует нетривиальной оптимизации кода. Таблица то содержит сотни миллионов строк. (Мне кажется, что MSSQL делает построение плана выполнения запроса как-то иначе, чем оракл. А Postgresql по своему. Хотя Sybase ближе к MSSQL, но не факт, что решения, предложенные MS Profiler-ом дадут желаемый результат на Sybase. Необходим инструмент к конкретной СУДБ.) Попробуем построить индекс по обоим полям. Посмотрим что получится. Всем спасибо за обсуждение и советы. Модератор: Тема перенесена из форума "Java". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 12:41 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
Ломаный качать не обязательно.9ка есть и для разработчиков,на ней можно и воссоздать структуру.А раз есть доступ к таблицам,то и наполнить можно реальными данными+можно попытаться из системных таблиц по-выбирать,авось там и остальные подробности таблиц можно будет узнать ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2010, 21:01 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
Если здесь и поможет какой-то индекс, то по field1. Но помогать будет слабо. Если таблица маленькая, то вообще ничего не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2010, 09:55 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
Тут на самом деле есть всего три варианта, которых легче попробовать чем гадать. надо построить три индекса: 1) field 1 2) field 2 3) field1, field2 И погонять с хинтом все три варианта. Теоретически, если нет условий where, то от индекса будет мало толка и сервер будет сканить таблицу. Оптимальность результата зависит от распределения данных в колонках и общего кол-ва строк. Я у себя на подобной таблице попробовал и вроде составной дал более шустрый результат (использовалась стратегия GrByO, в других случаях использовалась GrByH). Но мне кажется, что там кэширование тоже сыграло заметную роль, посему не уверен насчет моего результата. В десятке есть еще стратегия быстрого поиска для операций типа select max(поле) from table where поле2=n Вы бы описали всю задачу, может можно выкрутится другим способом. А еще может у вас там на блокировках запрос висит и тогда вы совсем не туда копаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2010, 12:54 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
On 26.10.2010 13:54, Ggg_old wrote: > Тут на самом деле есть всего три варианта, которых легче попробовать чем гадать. > надо построить три индекса: > 1) field 1 > 2) field 2 > 3) field1, field2 > И погонять с хинтом все три варианта. БЕЗ хинта. Иначе как он узнает, какой индекс полезный ? Покрывающие индексы (field1, field2) и (field1,field2,mx) я бы для начала убрал, потому как польза от них -- только что читать меньше (не таблица, а только индекс с меньшим размером). Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2010, 14:38 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
VectorПриветствую всех! Есть запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Поле field1 - строка переменной длины, field2 - дата и время. Как видно в запросе нет условий, только агрегатная функция. Подскажите, какой индекс может ускорить выборку, если вообще индекс сможет помочь при таком запросе? Если индекс бесполезен, то как можно ускорить выполнение запроса? P.s. SQL- Sybase 9. С уважением Vector. Индексы при MAX вообще всегда нужно использовать т.к. он долго очень думает на MAX всегда. К примеру если мне нужна максимальная дата во временно таблице(очень большой), то индекс к примеру по id какому нибудь очень ускорит работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2010, 16:13 |
|
Индексы для ускорения запроса
|
|||
---|---|---|---|
#18+
On 26.10.2010 17:13, Allirmo wrote: > Индексы при MAX вообще всегда нужно использовать т.к. он долго очень думает на > MAX всегда. > К примеру если мне нужна максимальная дата во временно таблице(очень большой), > то индекс к примеру по id какому нибудь очень ускорит работу. Это если MAX|MIN без группировки. А тут с группировкой. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2010, 12:33 |
|
|
start [/forum/topic.php?fid=55&msg=36906660&tid=2010496]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 160ms |
0 / 0 |