powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса
6 сообщений из 6, страница 1 из 1
Оптимизация запроса
    #39891458
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица, в которую складываются логи. Их много.
Надо определенные записи перенести в другую таблицу.
Записей для переноса больше миллиона.

Я пробую делать так:

Код: plsql
1.
2.
3.
4.
BEGIN; 
          INSERT INTO `alog1` SELECT * FROM `alog` WHERE `nomer`='45'; 
          DELETE FROM alog WHERE `nomer`='45'; 
COMMIT;



Вот уже 30 минут жду завершения запроса.
Как бы его оптимизировать ?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39891465
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак бы его оптимизировать ?
explain analyze?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39891614
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тут оптимизировать-то, мягко говоря, нечего. Нужен индекс по полю nomer - и всё, на этом мысль останавливается.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39891627
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Нужен индекс по полю nomer
Или партиция.

Или перенос вовсе не нужен.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39892176
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начал мудрить.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
		$conn = new PDO("mysql:host=$DBhost;dbname=$DBname", $DBuser, $DBpass);
		$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$conn->query("SET CHARACTER SET utf8");

		$res = $conn->query("BEGIN;");
		$res1_ins = $conn->query("INSERT INTO `alog1` (date,time,mes) SELECT date,time,mes FROM `alog` WHERE `nomer`='45';");
		$res1_del = $conn->query("DELETE FROM alog WHERE `nomer`='45';");
		$res = $conn->query("COMMIT;");

// сюда после добавлю 
//$conn->closeCursor();

		$res = $conn->query("BEGIN;");
		$res1_ins = $conn->query("INSERT INTO `alog1` (date,time,mes) SELECT date,time,mes FROM `alog` WHERE `nomer`='46';");
		$res1_del = $conn->query("DELETE FROM alog WHERE `nomer`='46';");
		$res = $conn->query("COMMIT;");



Получаю ошибку.
авторERROR: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll().
Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

Иду в поиск.
Добавляю $conn->closeCursor();

Выполнение вылетает. Переносятся сообщения с кодом 45, причем дублируются друг за другом. С кодом 46 вообще нету.
Почему ??
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39892255
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что непонятно в первой строке сообщения?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]