Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса / 6 сообщений из 6, страница 1 из 1
20.11.2019, 09:43
    #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
20.11.2019, 09:57
    #39891465
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
авторКак бы его оптимизировать ?
explain analyze?
...
Рейтинг: 0 / 0
20.11.2019, 13:12
    #39891614
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Ну тут оптимизировать-то, мягко говоря, нечего. Нужен индекс по полю nomer - и всё, на этом мысль останавливается.
...
Рейтинг: 0 / 0
20.11.2019, 13:25
    #39891627
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Akina
Нужен индекс по полю nomer
Или партиция.

Или перенос вовсе не нужен.
...
Рейтинг: 0 / 0
21.11.2019, 08:55
    #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
21.11.2019, 11:55
    #39892255
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Что непонятно в первой строке сообщения?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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