Maestro
|
поискатель
|
|
|
|
Рег.: 17.09.2003
|
Сообщений: 28615
|
Из: SPB
|
Рейтинг: 9311
|
|
помогите с mysql плз
28.05.2008 17:08
|
|
|
подскажите плиз, как с помощью хранимой процедуры сделать такое: получаем одним из параметров тип DATE, берем оттуда ГГГГ-ММ, смотрим, нет ли в базе таблицы с таким именем, и если нет, создаем и вставляем туда запись, а если есть, то просто вставляем туда запись.
|
Muistatko mitä enemmin, vain jo loppuivat lorusi? |
|
pilotrulit
|
enthusiast
|
|
|
|
Рег.: 19.11.2005
|
Сообщений: 297
|
|
Рейтинг: 507
|
|
Re: помогите с mysql плз
[re: Maestro]
28.05.2008 17:14
|
|
|
Обычно на такие вопросы отвечают фразой "Вам это не нужно". Хоть такой ответ мне и не нравится, но что-то в нем в данном случае есть
|
|
Maestro
|
поискатель
|
|
|
|
Рег.: 17.09.2003
|
Сообщений: 28615
|
Из: SPB
|
Рейтинг: 9311
|
|
|
проблема в том, что в данном случае как раз-таки нужно именно это.
|
Muistatko mitä enemmin, vain jo loppuivat lorusi? |
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
Re: помогите с mysql плз
[re: Maestro]
28.05.2008 17:22
|
|
|
В ответ на:
проблема в том, что в данном случае как раз-таки нужно именно это.
расскажи плиз зачем это нужно, создавать таблицы в зависимости от даты очень интересно
|
Хватит дрочить на рейтинги |
|
Maestro
|
поискатель
|
|
|
|
Рег.: 17.09.2003
|
Сообщений: 28615
|
Из: SPB
|
Рейтинг: 9311
|
|
Re: помогите с mysql плз
[re: botWi]
28.05.2008 17:28
|
|
|
в требованиях к структуре БД стоит так. мне это самому кажется дикостью, но что делать. требования составляли большие дяди, их не переубедишь.
|
Muistatko mitä enemmin, vain jo loppuivat lorusi? |
|
Storm
|
:)
|
|
|
|
Рег.: 09.09.2004
|
Сообщений: 3301
|
Из: hane.ru
|
Рейтинг: 132
|
|
Re: помогите с mysql плз
[re: botWi]
28.05.2008 17:46
|
|
|
Quote:
расскажи плиз зачем это нужно, создавать таблицы в зависимости от даты
Это-то как раз понятно - секционирование. MySQL его умеет только с версии 5.1
Только зачем это делать через ХП? Не проще сразу в запросе нужную таблицу указать?
|
|
|
pilotrulit
|
enthusiast
|
|
|
|
Рег.: 19.11.2005
|
Сообщений: 297
|
|
Рейтинг: 507
|
|
Re: помогите с mysql плз
[re: Storm]
28.05.2008 18:14
|
|
|
В ответ на:
Это-то как раз понятно - секционирование. MySQL его умеет только с версии 5.1
Только зачем это делать через ХП? Не проще сразу в запросе нужную таблицу указать?
Ну про partitioning понятно. Меня именно процедуры хранимые смутили. А mysql 5.1 меня кстати очень порадовал. Он некоторые вещи более разумно делает. И при переходе отвалилось только то, за что убивать надо - соответственно правильно, что отвалилось
И кстати автору можно использовать мегаметод прегенерации таблиц. То есть создавать некоторым скриптиком, пускаемым по крону пару раз в неделю таблички на месяц вперед и не париться о проверке.
|
|
Maestro
|
поискатель
|
|
|
|
Рег.: 17.09.2003
|
Сообщений: 28615
|
Из: SPB
|
Рейтинг: 9311
|
|
Re: помогите с mysql плз
[re: Storm]
28.05.2008 18:25
|
|
|
не проще, потому что к БД будут обращаться из многих мест и с помощью разных интерфейсов. то есть, чтобы никто особо не думал, а просто вызывал процедуру(она кроме этого еще будет кое-чего делать).
|
Muistatko mitä enemmin, vain jo loppuivat lorusi? |
|
den
|
IQ Test Negative
|
|
|
|
Рег.: 18.09.2003
|
Сообщений: 2609
|
|
Рейтинг: 1027
|
|
Re: помогите с mysql плз
[re: Maestro]
28.05.2008 18:59
|
|
|
Че то как то не этак. Имхо правильнее хранить в одной таблице с отдельным столбом гггг-мм, в нее же и писать без проверок. И наделать кучу вьюх с именами гггг-мм если уж совсем нужно. (хотя мб конечно при больших обьемах напрямую к таблице будет существенно быстрее обращацца, только наверняка при какой то большой аналитике еще и union all всякие будут в случае отдельных таблиц).
|
|
Maestro
|
поискатель
|
|
|
|
Рег.: 17.09.2003
|
Сообщений: 28615
|
Из: SPB
|
Рейтинг: 9311
|
|
Re: помогите с mysql плз
[re: den]
28.05.2008 19:22
|
|
|
я уже говорил, что знаю, что это не так, но задача стоит так - почесать правой пяткой левое ухо.. вопрос не в том, что это неестественно, а в том, как это сделать.
|
Muistatko mitä enemmin, vain jo loppuivat lorusi? |
|
den
|
IQ Test Negative
|
|
|
|
Рег.: 18.09.2003
|
Сообщений: 2609
|
|
Рейтинг: 1027
|
|
Re: помогите с mysql плз
[re: Maestro]
28.05.2008 20:14
|
|
|
code:
create table if not exist gggg-mm (...........)
Если вот эта вот if not exist долго выполняется - то мб надо создать отдельную таблицу и хранить в ней уже созданные и проверять сначала по ним. Как то так наверно
code:
create table tbl_names(varchar tbl_name);
code:
.....
IF NOT EXIST (select tbl_name from tbl_names where tbl_name=@ggggmm)
THEN IF NOT EXIST @ggggmm
THEN
create table @ggggmm (....);
insert into tbl_names values(@ggggmm);
END IF;
END IF;
~~Action~~
.....
ps. Сам в mysql почти не работал - но если верить гуглу по диагонале - то нечто такое там можно осуществить по идее. Самому проверять лень.
|
|
Maestro
|
поискатель
|
|
|
|
Рег.: 17.09.2003
|
Сообщений: 28615
|
Из: SPB
|
Рейтинг: 9311
|
|
Re: помогите с mysql плз
[re: den]
28.05.2008 20:39
|
|
|
не хочет он видеть переменную в CREATE TABLE. ругается на нее.
|
Muistatko mitä enemmin, vain jo loppuivat lorusi? |
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31410
|
|
Рейтинг: 8951
|
|
Re: помогите с mysql плз
[re: Maestro]
28.05.2008 22:26
|
|
|
Quote:
не хочет он видеть переменную в CREATE TABLE. ругается на нее.
тогда генери как текст и запускай через какой-нибудь exec
|
|
Maestro
|
поискатель
|
|
|
|
Рег.: 17.09.2003
|
Сообщений: 28615
|
Из: SPB
|
Рейтинг: 9311
|
|
|
сенькс!! всем спасибо. я уже придумал еще один изврат(написал dll-ку и послал всем кто в базу будет лазать), но это лучше.
|
Muistatko mitä enemmin, vain jo loppuivat lorusi? |
|
Storm
|
:)
|
|
|
|
Рег.: 09.09.2004
|
Сообщений: 3301
|
Из: hane.ru
|
Рейтинг: 132
|
|
Re: помогите с mysql плз
[re: den]
29.05.2008 12:44
|
|
|
Quote:
Имхо правильнее хранить в одной таблице с отдельным столбом гггг-мм, в нее же и писать без проверок. И наделать кучу вьюх с именами гггг-мм если уж совсем нужно.
Эээ. Если и делать вьюшки, то наоборот. Куча мелких таблиц и одна общая вьюшка с триггером INSTEAD OF INSERT.
PS Всем кому идея маленьких таблиц кажется неестественной, почитайте что такое секционирование и зачем оно нужно. Или попробуйте поработать с таблицами объемом 100+Гб. Самый правильный путь - использованить функции секционирования самой БД. Какая версия мускуля используется кстати?
|
|
|
den
|
IQ Test Negative
|
|
|
|
Рег.: 18.09.2003
|
Сообщений: 2609
|
|
Рейтинг: 1027
|
|
Re: помогите с mysql плз
[re: Storm]
29.05.2008 14:23
|
|
|
Почитал спасибо Кругозор еще немного расширен
|
|
pilotrulit
|
enthusiast
|
|
|
|
Рег.: 19.11.2005
|
Сообщений: 297
|
|
Рейтинг: 507
|
|
Re: помогите с mysql плз
[re: Storm]
29.05.2008 14:45
|
|
|
В ответ на:
Или попробуйте поработать с таблицами объемом 100+Гб.
Самый ice. После проктирования такого становишься keymaster <писько> code: Rows: 1139182874
Avg_row_length: 230
Data_length: 262456475648
Max_data_length: 0
Index_length: 108979503104
Data_free: 0
Auto_increment: 1245841535
</писько>
По этому еще и селектиццо нормально
|
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
|
а у меня вот щас из таблицы в 100 штук записей селектится 10 секунд а если еще и ордербай по таймстампу стелать ...
|
Хватит дрочить на рейтинги |
|
pilotrulit
|
enthusiast
|
|
|
|
Рег.: 19.11.2005
|
Сообщений: 297
|
|
Рейтинг: 507
|
|
Re: помогите с mysql плз
[re: botWi]
29.05.2008 15:06
|
|
|
В ответ на:
а у меня вот щас из таблицы в 100 штук записей селектится 10 секунд а если еще и ордербай по таймстампу стелать ...
100 или 100 000 ? кстате ботай как создавать индексы, чтобы при ордере using filesort не было.
|
|
Storm
|
:)
|
|
|
|
Рег.: 09.09.2004
|
Сообщений: 3301
|
Из: hane.ru
|
Рейтинг: 132
|
|
|
Боюсь у него Оракл и никакого filesort не будет, пока есть свободная память.
2botWi: [телепат мод]Попробуй в запросе TO_DATE <-> TO_TIMESTAMP поменяй, может поможет.[/телепат мод]
Редактировал Storm (29.05.2008 15:17)
|
|
|