Поле - справочник (классификатор, реестр)

InstantCMS 2.X
#1 19 мая 2021 в 16:23
Допустим, есть какая-то база с +100500 строками, значения из которой надо присваивать единице контента, допустим, организации в каталоге организаций. Пусть (для примера) это будет ОКТМО.
Или например, у нас есть каталог ВУЗов и нужно присвоить несколько значений каждому ВУЗу из ОКСО. Это просто грубые примеры, чтобы было ясно в чем суть.
Понятно, что в поле "Список — мультивыбор" такой справочник не засунешь. Да и записи из справочника нужно удалять/добавлять периодически.
+ оставить возможность для фильтрации по такому полю для юзера.

Наверное, это еще не бигдата. Тем не менее. Как это реализовать максимально производительно на базе MySQL? "Расширяемый список" с аддонса — что-то похожее, но там все строки выводятся сразу.

Возьмем пример строчки ОКТМО:
  1.  
  2. id code name
  3. 8 14605408 Афанасьевское
  4.  
Юзер начинает вводить в фильтр "Афан" — делаем аякс-запрос на сервер, и возвращаем из таблицы все записи начинающиеся на "афан". Собственно, какой запрос MySQL здесь лучше использовать? И как правильно построить индексы для такой таблицы?

  1. SELECT * FROM `oktmo` WHERE name LIKE 'афан%'
Плохой вариант?
#2 19 мая 2021 в 16:35
@Absolute134, возможно такие вопросы лучше задавать на специальных форумах. Php+Mysql.
#3 19 мая 2021 в 17:07


@Absolute134, возможно такие вопросы лучше задавать на специальных форумах. Php+Mysql.

Lora
Дык вроде здесь люди разработкой занимаются, исходя из названия раздела. Собственно, по SQL у меня знаний и не хватает, поэтому и спрашиваю. Остальное (js, php) — не большая проблема. Возможно, есть какие-то механизмы самой CMS о которых я не знаю и которые позволят решить данную задачу.
Интереса ради:
Попробовал LIKE с кириллицей в запросе на таблице 14 тыс. записей — вроде быстро (тысячные доли секунды).
Попробовал на таблице 37 тыс записей при чем с латиницей — уже 0.07 секунды. Хз кароч.
#4 19 мая 2021 в 18:35
Слабо знаком с mysql и индексами при поиске, знаю только какие-то банальные вещи вроде: xpoint.ru/forums/computers/dbms/mysql/thread/40346.xhtml (когда используются индексы, а когда нет). В базе жилых домов России уже 1,183,970 строк. А если стоит задача создать прям релевантный, быстрый поиск, с выборкой и полями, то возможно имеет смысл обратиться к специализированным вещам, которые собственно и занимаются поиском. Например, Manticore Search, клон Sphinx, или самому Sphinx, который ставится на VPS достаточно быстро. Имея базу, поля, инфу там, мы легко можем индексить их и искать уже по индексу Sphinx, например. Просто если вы пишете про 0.07 секунды, возможно поиск является у вас приоритетным. Многие крупные проекты отдают поиск тому, кто специализируется на нем.

А по индексам, на StackOverflow много материалов. В Яндексе сперва можно набрать общий запрос, чтобы выйти на что-то там: "Нужны ли индексы для LIKE — MySql? — StackOverflow"
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.