Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Вниз

Mysql. Оптимизация выборки   Найти похожие ветки 

 
Zeqfreed ©   (2009-05-28 19:25) [0]

Всем доброго вечера.

Имеется таблица InnoDB, на данный момент в ней 4 миллиона строк. Ожидается до 40-50 миллионов. В таблице около 25 столбцов, в основном дробного типа + несколько временных (datetime).

Используя одновременную вставку нескольких строк удалось добиться приемлемого времени вставки (4 миллиона записей — около 30 минут). Сейчас начались проблемы с выборкой.

Оожидается, что выборка в основном будет осуществляться по интервалу времени (одно из временных полей) с указанием дополнительных ограничений (по значению целочисленного поля tinyint). Сегодня я попробовал добавить индекс по одному из временных полей, и так и не дождался его создания.

Вопрос следующий. Возможно ли добиться адекватного времени выборки в Mysql на таком наборе данных и что для этого следует попробовать предпринять? Имеет ли смысл пробовать Postgres или у него нет каких-либо существенных преимуществ в такой ситуации?

Надеюсь на помощь опытных форумчан, спасибо :)


 
turbouser ©   (2009-05-28 19:57) [1]


> Имеет ли смысл пробовать Postgres

имеет


 
Zeqfreed ©   (2009-05-28 20:09) [2]

> turbouser ©   (28.05.09 19:57) [1]

А какие преимущества я от этого смогу получить? Мне так думается, что от одной только  смены СУБД мало что поменяется, или я не прав? Если не прав, то опять же хотелось каких-нибудь бы аргументов :)


 
T&F   (2009-05-28 20:11) [3]


> Имеет ли смысл пробовать Postgres

Недавно читал, что по производительности она не особо-то лучше MySQL, а даже совсем наоборот. Хотя свежих тестов найти не смог, так что без понятия, правда это или нет


 
Sergey13 ©   (2009-05-29 08:54) [4]

> [0] Zeqfreed ©   (28.05.09 19:25)
> 4 миллиона записей — около 30 минут

> добавить индекс по одному из временных полей, и так и не дождался его создания.

Сколько ждал то? Судя по веремени вставки и должно быть достаточно долго. Почему не дождался?


 
palva ©   (2009-05-29 09:39) [5]


> Почему не дождался?

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


 
Zeqfreed ©   (2009-05-29 15:16) [6]

> Sergey13 ©   (29.05.09 08:54) [4]

Не дождался, т.к. домой пошел :)

> palva ©   (29.05.09 09:39) [5]

Там были индексы, только то поле, по которому я пробовал выборку, входило в мультиколоночный индекс и по всей видимости он не использовался.


 
Sergey13 ©   (2009-05-29 15:59) [7]

> [6] Zeqfreed ©   (29.05.09 15:16)
> Не дождался, т.к. домой пошел

Это так же действенный способ и при решении проблем с выборкой данных.


 
Zeqfreed ©   (2009-05-29 20:12) [8]

> Sergey13 ©   (29.05.09 15:59) [7]

К сожалению, он действует не всегда. Жаль, что что-то реальное посоветовать никто не может.


 
Нат ©   (2009-05-30 01:46) [9]

Что значит "по одному из временных полей"?
Зачем такое важно поле вре"менное? Или в смысле "временно"е", вре"менного типа?
Кстати, не известно, каков запрос.


 
turbouser ©   (2009-05-30 02:48) [10]


> Zeqfreed ©   (29.05.09 20:12) [8]

Почему? а как же  [1] ?


 
Zeqfreed ©   (2009-05-30 04:56) [11]

> Нат ©   (30.05.09 01:46) [9]

Я имею в виду поле временного типа. Как его правильно назвать? Datetime в общем.
Запрос примерно такой: select * from table where datetime_column >= timestamp1 and datetime_column <= timestamp2 and tinyint_column in (val1, val2, val3). Но может быть и несколько сложнее. Хотя мне кажется, что если выборка по дате пройдет с использованием индексов, то дальше уже пошустрее в любом случае будет?

> turbouser ©   (30.05.09 02:48) [10]

Реальность этого совета я еще не успел опробовать. Но вообще да, спасибо :)


 
Псалтырь ©   (2009-05-30 10:14) [12]


> T&F   (28.05.09 20:11) [3]
>
>
> > Имеет ли смысл пробовать Postgres
>
> Недавно читал, что по производительности она не особо-то
> лучше MySQL, а даже совсем наоборот.

Брэд... Не Пит, который. А который сивой кобылы брэд


 
turbouser ©   (2009-05-30 10:33) [13]


> Псалтырь ©   (30.05.09 10:14) [12]


> Брэд...

Ну так заказных тестов в сети до и больше.
У MySQL своя ниша, из которой они пытаются выползти, с переменным успехом :)
Работал с энтим MySQL... 5.х... тоже миллионы записей... ну его нафик.... не люблю я его... =) или =(


 
Нат ©   (2009-05-31 02:28) [14]


select * from table where datetime_column >= timestamp1
and datetime_column <= timestamp2 and tinyint_column in
(val1, val2, val3)

Проверьте, как быстро будет выполняться запрос без "in ()".
Если всего три значения...
"=" выполняется быстрее.


 
Sergey13 ©   (2009-06-01 08:41) [15]

> [8] Zeqfreed ©   (29.05.09 20:12)
> Жаль, что что-то реальное посоветовать никто не может.

А как тебе советовать если ты домой уходишь? 8-)
Нужен индекс - построй его. В чем проблема то?
Кстати, если нужно строить по ДатеТайм+Интежер зачем строить только по ДатеТайм? Строй сразу нужный.


 
Zeqfreed ©   (2009-06-15 21:00) [16]

В общем я таки добрался до постгреса сегодня, работает заметно быстрее :)

Мускуль создавал индексы по 15-20 минут, я создал три индекса и в принципе выборка
стала происходить в разумное время. Однако потом проявились проблемы с определением того, какие индексы использовать и как. При ручном указании индекса запрос отрабатывал за секунду примерно, а без указания мускуль путался и выбирал 20 секунд.

Сегодня импортировал базу в постгрес, 46 минут ушло на импорт 4 млн. записей. Затем создал индексы, каждый создавался по 25-30 секунд, что очень заметно по сравнению со временем, которое показывал мускуль. Выборка в среднем в два раза быстрее. На том запросе, на котором мускуль начинал путаться в индексах, постгрес сам разобрался как использовать два индекса и в итоге выборка ускорилась примерно в 9 раз.

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

Всем спасибо за комментарии, извиняюсь что не отвечал.


 
tesseract ©   (2009-06-15 22:43) [17]


> Выборка в среднем в два раза быстрее


Составные индексы + хранимые  не пробовал?


> результаты впечатляют и вообще он интересней :)


Недобаза и есть недобаза - OLTP огрызок. Но помни о VACUUM %-)


 
Zeqfreed ©   (2009-06-15 22:56) [18]

> tesseract ©   (15.06.09 22:43) [17]

У меня задача оптимизировать по возможности все потенциальные произвольные запросы, поэтому сложно предполагать какие составные индексы могут пригодиться. Хранимые — то же самое, в перспективе необходимо будет работать с произвольными запросами.

Недобаза это кто и почему?


 
tesseract ©   (2009-06-16 00:04) [19]


> Недобаза это кто и почему?


мускул. Она только  как OLTP и в качестве оптимизированной выдаче не индексированной текстовой информации может быть хоть как-то применена. Поизвольных запросов не бывает - они всё равно попадают в определённые рамки. Ни разу не видел запросов только по одному критерию в сколько нибудь сложной базе. Это уже ведёт к понятию "сервер отчётов".


 
Zeqfreed ©   (2009-06-16 01:04) [20]

> tesseract ©   (16.06.09 00:04) [19]

Ну, по сути отчеты и нужно составлять. Запросы, конечно, не по одному критерию, подумать насчет составных может быть и стоит, но все равно всех случаев не предусмотреть. Насколько они полезны?



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
10-1159939154
Priest
2006-10-04 09:19
2009.08.16
COM+ сервер и критическая секция


8-1196618520
leonidus
2007-12-02 21:02
2009.08.16
Как отобразить прямоугольное выделение на картинке


4-1214572314
CyberJack
2008-06-27 17:11
2009.08.16
Как получить ID системного динамика? И возможно ли это?


2-1245663388
OlegNik
2009-06-22 13:36
2009.08.16
Имя файла но короче.


9-1182002201
Max_
2007-06-16 17:56
2009.08.16
Карта 2D-изометрия





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский