В настоящее время я пытаюсь удалить дубликаты строк в MySQL 5.7 (InnoDB) и проверяю, сколько у меня дубликатов столбца mediumtext
, запустив SELECT COLUMN, COUNT(*) FROM TABLE GROUP BY COLUMN HAVING COUNT(*) > 1
.Самый последний возвращенный запрос:
[results]
31620 rows in set (17.98 sec)
Если я выполню тот же самый запрос через мгновение, я получу:
[results]
31594 rows in set (17.35 sec)
И так далее.Я получаю разные результаты почти каждый раз.Во время запроса ничего не записывается в базу данных. Делает это только с этим запросом ;SELECT COUNT(*) FROM TABLE
, SELECT COUNT(*) FROM TABLE WHERE COLUMN LIKE <VALUE>
и т. Д. Все дают согласованные результаты. Эта ошибка также не возникает при выполнении SELECT COLUMN, COUNT(*) FROM TABLE GROUP BY COLUMN HAVING COUNT(*) > 0
.
Я не уверен, какой другой код предложить, чтобы помочь ответить на этот вопрос, так как это единственный запрос, который я выполняю иЯ делаю это прямо в консоли.Я пытаюсь придумать, что могло бы объяснить это.Учитывая других проблем , которые у меня были с этой же базой данных, мне интересно, возможно ли, что что-то повреждено.
Редактировать: Я запустил 1000запросы для выборки результатов, и они выглядят так:
Верхний предел 33991 является наиболее распространенным результатом.
Кодировка таблицы - utf8mb4
, а сортировка агрегируемого столбца - utf8mb4_general_ci
.
Выходная информация EXPLAIN SELECT COLUMN, COUNT(*) FROM COLUMN GROUP BY COLUMN HAVING COUNT(*) > 1;
при использовании MyISAM:
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+---------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+---------------------------------+
| 1 | SIMPLE | TABLE | NULL | ALL | NULL | NULL | NULL | NULL | 788685 | 100.00 | Using temporary; Using filesort |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+---------------------------------+
Результаты дляInnoDB:
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+---------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+---------------------------------+
| 1 | SIMPLE | TABLE | NULL | ALL | NULL | NULL | NULL | NULL | 769501 | 100.00 | Using temporary; Using filesort |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+---------------------------------+
Вещи, которые я пробовал до сих пор, как предложено в комментариях :
- Memtest, с использованием пакета
memtest
Linux и запуска memtest 15G 2
(система имеет 16 ГБ памяти, при этом доступно 15,4 и используется около 4,4. Это облачная машина, и я не могу загрузиться с Memtest, хотя я отправил запрос провайдеру, чтобы выяснить, могут ли они. - Включение общего журнала, в котором между запросами не выполнялось никаких других действий.
- Использование
OPTIMIZE TABLE
. - Удаление и повторное добавление индекса.
- Изменение обработчика таблиц на MyISAM из InnoDB, что, похоже, немного помогло, так как запрос теперь достигает максимального предела после нескольких запросов, но этовсе еще отскакивает от начальных нескольких запросов.