Спасибо за вашу помощь, у нас есть SQL-запрос, который выполнялся в течение 5 лет, и он был в порядке. С приходом новой загрузки запросу потребовалось более 4 часов, и время ожидания истекло, поэтому мы выделили проблему для следующего оператора:
Этот оператор SQL был упрощен для легкого чтения:
select * from table1 t1, table2 t2
where (t1.ProductCode between t2.BeginNumber and t2.EndNumber)
Example with values
select * from table1 t1, table2 t2
where ('12345' between '12345' and '12345')
ProductCode, BeginNumber, EndNumber имеет индекс BTree, и они имеют тип varchar.
Table1 имеет 50000 строк. Table2 имеет 113000 строк
BeginNumber и EndNumber на самом деле являются одним и тем же числом, диапазон отсутствуетв них (например, BeginNumber = 12345 EndNumber = 12345), но для обеспечения соответствия мы не можем изменить предложение «Между» на «Равное», поскольку в будущем они могут изменить число на диапазон.
Это работает на MYSQL 5.6.11, настроенной памяти InnoDB 4 ГБ, Intel i7-8550, 8 ГБ ОЗУ. Она была разработана как небольшая некритическая база данных, но недавние изменения в источнике входящих данных значительно выросли, и количество рабочих мествисят, и он слишком долго зависает в этом утверждении (4 часа).
Аппаратное обеспечение будет обновлено до 16 ГБ ОЗУ, SSD, кроме этого, как мы можем заставить оператор работать быстрее?