Как выполнить mysql json_contains, чтобы узнать о вхождении значения массива в диапазон другого?
Здравствуйте,
Дан массив данных типа json в MySQL, и есть столбец с массивами для сравнения их через json_contains.
Всё было бы прекрасно и удалось бы обойтись одной командой, если бы не один нюанс:
В первом массиве значение одного из ключей представляет собой целое число. А во второй группе массивов мы имеем дело с диапазоном, оформленным через {min_value: n ; max_value: n }.
По всем остальным ключам всё однозначно. Но что сделать с этим?
Есть конечно альтернативы вроде вынести границы диапазона в отдельные столбцы и сначала проверять соответствие по ним через операторы, а потом делать json_contains уже без этого проблемного ключа в массиве. Но, мне кажется, 2 команды всегда буду выполняться дольше.
Как можно всё-таки сравнить массивы на вхождение одной командой? Или я вообще зря заморачиваюсь, и вынесение диапазона из массива и сопоставление через 2 команды не скажется значимым образом на скорости выполнения запроса?
Если посмотреть на вопрос с другой стороны, а точно ли одной командой лучше? Если будет несколько индексируемых столбцов, и выполняемый по ним поиск отсеит хорошую часть данных столбца, то последующая json-команда может выполниться быстрее.
Однако речь идёт об очень маленькой таблице. Изначально, скажем, в ней 500 строк. С "промежуточным" поиском останется 150-300 строк. Но можно также использовать сразу multi-valued индексы на группу ключей (MySQL 8).
Как бы там ни было, выбирать, какой вариант будет быстрее, можно в том случае, если вообще возможно существование всех вариантов.