У меня есть таблица «картинка» с 255 записями для цветов картинки. У меня есть таблица "colors_mixed" с 23897 записями. Мне нужно найти наиболее близкий смешанный цвет ко всем цветам изображения, поэтому я написал запрос:
SELECT m.id
FROM picture AS p
INNER JOIN colors_mixed AS m ON
(ABS(m.red - p.r) + ABS(m.green - p.g) + ABS(m.blue - p.b))
= (select min(abs(red - p.r)
+ abs(green - p.g)
+ abs(blue - p.b)) from colors_mixed)
WHERE p.id BETWEEN 1 AND 10
Он работает менее 1 секунды. Если я использую
WHERE p.id BETWEEN 1 AND 150
, он работает около 4 секунд. Но если я использую
WHERE p.id BETWEEN 1 AND 200
или вообще не использую «WHERE», он работает минуту, 2 минуты, и я просто не хочу больше ждать, потому что это должно быть сделано за 5 секунд. То же самое происходит, если я использую обратный порядок -
WHERE p.id BETWEEN 200 and 255
работает нормально, а «МЕЖДУ 50 и 255» просто не останавливается.
Посоветуйте, пожалуйста, как это исправить?