Задавайте вопросы, мы ответим
Вы не зашли.
В теории можно использовать партиционирование, почитайте про engine=mrg_myisam.
Можно вообще слить все таблицы в одну.
И посмотрите топик http://sqlinfo.ru/forum/viewtopic.php?id=2264
Неактивен
deadka написал:
В теории можно использовать партиционирование, почитайте про engine=mrg_myisam.
Можно вообще слить все таблицы в одну.
И посмотрите топик http://sqlinfo.ru/forum/viewtopic.php?id=2264
А если сделать вообще 1 таблицу MyISAM с данными из всех таблиц. Строк получится около 4 500 000. Может на приктике сталкивались с таким, как такое действие отразится на нагрузке?
Неактивен
Смотря что за запросы идут к той таблице, какие индексы там стоят, итп. Вы попробуйте , иногда преждевременная оптимизация - зло.
Неактивен
Понял )) Спасибо!
А как правильно замерить скорость обработки запроса?
Неактивен
Засеките время до и после выполнения запроса, и посмотрите разницу.
Неактивен
Даже если сделать 51 таблицу, то использование Union создает очень длинный запрос. Вообще какая максимальная длина у запроса и как его укоротить? Может есть еще возможности, кроме union?
Неактивен
Неактивен
Подозреваю, что из-за того, что столбец id есть и у table1 и у table2 и у table3.
Попробуйте
SELECT * FROM table1, table2, table3 WHERE table1.id=1;
а лучше
SELECT * FROM table1 t1, table2 t2, table3 t3 WHERE t1.id=1;
Неактивен
С выбором вроде разобрался. Но теперь столкнулся с проблемой обновления двух значений в тех же самых таблицах. Сейчас для обновления двух столбцов datastp и status в нескольких строоках применяется запрос в цикле for. Сам запрос выглядит так UPDATE table1 SET status=постоянное_значение, datastp=индивид_значение_у_каждой_строки WHERE id=значение .
Пожалуйста подскажите, как правильно составить запрос чтобы обновить значения сразу в нескольких строках одной таблицы. По возможности без использования UNION и с мелким количеством запросов
Отредактированно klk.pma (11.05.2014 11:43:22)
Неактивен
В рамках обновления одной таблицы Вы можете использовать конструкцию не
WHERE id=значение
а
WHERE id In (значение1,значение2,значение3,...,значениеn)
Неактивен
deadka написал:
В рамках обновления одной таблицы Вы можете использовать конструкцию не
WHERE id=значение
а
WHERE id In (значение1,значение2,значение3,...,значениеn)
Ее можно испоьзовать , если вносить одинаковые значения во все строки. А у меня только значение status статическое, а для datastp используются разные значения. Поэтому и возник вопрос о правильном составлении запроса. С учетом этой особенности, как правильно его составить? Вообще есть такая возможность в sql?
Отредактированно klk.pma (11.05.2014 12:12:57)
Неактивен
Хехм, ну если в разные строки в зависимости от разных условий разные значения, то либо что-то сложное с case when end мутить, либо просто разными запросами.
Неактивен
То есть из простых вариантом самым оптимальным остается UNION?
Отредактированно klk.pma (11.05.2014 12:16:10)
Неактивен
Стоп, мы говорим про update или про селект? в случае update'а какой может быть union, Вы о чем?
Неактивен
Вот это меня и интересует. Как можно сократить количество запросов Update. Может их можно как-то объединить?
Неактивен
Давайте формализуем . Опишите в контексте конкретных таблиц, полей, значений.
Вот есть у нас две таблицы t1, t2, в них есть поле f1,f2, в них значения v1,v2, исходно набор значений такой-то, на выходе хотим получить такой-то.
Неактивен
) хорошо. Есть таблицы t1, t2, t3. В каждой таблице есть 4 столбца (id, status, dataend' datastp), они одинаковые по названию типу во всех таблицах. Dataend всегда имеет цифровое значение более 0. Datastp = 0. При обновлении строк надо изменить status на 2, а datastp = dataend в одной таблице
Неактивен
Халтура! Вы не привели наборы данных - исходный и желаемый !
При обновлении строк надо изменить status на 2, а datastp = dataend в одной таблице
UPDATE `t1` SET status = 2, datastp = dataend;
Неактивен