Сегодня мы заметили странное поведение в SQL-запросах (мы используем MySQL v5.6.36 и InnoDB).
Возьмите этот запрос:
mysql> SELECT count(*) FROM `inventory` WHERE `user_id` = 12345;
Он возвращает следующий результат:
+----------+
| count(*) |
+----------+
| 495 |
+----------+
Но тогда, когда выполняется следующий запрос:
mysql> SELECT count(*) FROM `inventory` WHERE `user_id` = 12345 AND list_type = 3;
Получаем:
+----------+
| count(*) |
+----------+
| 1263 |
+----------+
Как вы можете видеть, количество результатов больше, когда запрос ограничен, что не должно происходить. Что может быть причиной этого? Это происходит в основной базе данных только тогда, когда обе базы данных репликации показывают правильные результаты. Мы подозреваем поврежденные индексы. Как предотвратить такие ошибки в будущем?
Любые другие условия, кроме list_type
, возвращают недопустимые (слишком высокие) значения.