Оптимизировать SQL запрос по списку товаров - PullRequest
0 голосов
/ 31 марта 2020

У меня есть около 400 тысяч строк в базе данных. Все запросы в этом наборе данных оптимизированы для возврата менее чем за 0,4 с и работают хорошо. Однако мне нужно добавить дополнительное поле под названием Территории, которое может включать от 0 до 250 территорий (любая страна в мире), обычно около 150. Конечно, «реляционный» способ добавить это будет добавить территорию с FKey к таблице продуктов, но когда я пытаюсь сделать это с помощью соединения, я обычно получаю запросы в диапазоне 2-7 с, поскольку сейчас я запрашиваю около 60 миллионов строк, и запрос выглядит примерно так:

SELECT product from table join ... 
WHERE territories in ['USA', 'France', 'Germany']
ORDER BY some_field LIMIT 50

Это слишком медленно для требований приложения, и мне было интересно, как я мог бы ускорить этот запрос, используя какое-то потенциально плоское поле. Вот несколько идей, которые у меня были:

  • Сохраните его как массив json (пробовал, производительность была даже хуже, чем при объединении).
  • Сохраните это как набор (не не представляется возможным, так как установлен 8 байт , поэтому менее 100 значений).
  • Сделайте что-то вроде поля полнотекстового поиска и индексируйте каждую страну как единое целое (может быть в порядке, но очень плохо для выполнения сортировки в конце)
  • Используйте четыре BIGINT с растровым изображением в этих четырех полях для значений 240 (кажется, ужасная идея, но идея, тем не менее, у меня была).

Мое требование здесь - запрос должен быть возвращен менее чем за 0,5 с. Какой может быть лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...