- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Если всегда 50, то сделайте 50 столбов на каждый из них повести индексы и всё будет летать.
Если выборка по 20 разным свойствам, к примеру, то насчет летать это Вы немного погорячились - может и затупить, мускул не всегда осилит угадать нужную очередность, особенно если выборки по каждому конкретному свойству большие получаются.
Для каждого объекта есть 50 характеристик, которые могут иметь значения 0, 1 и 2. Как правильнее слепить таблицу, если потом понадобится делать выборки типа «все объекты, у которых характеристика номер 23 и/или 28 и/или 45 и/или 48 равна 1» ?
Или делаем поля Id объекта, Id характеристики, Значение характеристики. Или делаем поля Id объекта плюс 50 полей характеристик, в которые вписываем значения. Сам думаю, первый вариант быстрее и удобнее (с нуля сделал бы так), но мне в наследство достался второй, оттого впал я в сомнения и спрашиваю здесь совета.
В поисковой таблице оставляете только ID и сами характеристики (никакого хлама типа доп.полей с описаниями, пытайтесь уменьшить размер таблицы, меньше объем - быстрее поиск).
Характеристики могут иметь 0,1,2 => стабильно занимают 2 бита, не фиг выделять по 1 столбцу для каждого значения, трамбуйте. Избыточно трамбовать смысла нет, поэтому за базу берите TINYINT - 1 байт, 8 бит. В каждый столбец влезет по 4 значения (при 2 битах на значение), таким образом хватит 13 столбцов под характеристики, а по размеру 50 столбцов даже tinyint это совсем другое чем 13 столбцов по объему таблицы (меньше объем - быстрее поиск).
Подумайте о том, как их сгруппировать, чем меньше столбцов задействовано в поиске - тем круче, неплохим вариантом будет сдублировать значения в доп. столбцы для более удобного/быстрого поиска (пусть даже увеличив их кол-во). Для ускорения поиска есть так же смысл использовать составные индексы (а не только обычные), myisam поддерживает до 16 столбцов в составном индексе - вполне вписываетесь. Но с индексами тут та проблема - как выделять отдельные свойства, так что использоваться они будут не всегда.
Кроме того, можете использовать set тип поля, опять же трамбуя в один сет - несколько хар-ик.
Если кол-во записей относительно небольшое, есть смысл подумать о memory типе таблице, при допустим 13 байтах под хар-ки и 4 байтах под ИД товара, это 17 байт на строку, что позволит запихнуть в 17 мегабайт - 1 миллион записей, а скорость поиска получится очень неплохой даже без индексов.
p.s.: Кстати, Asar, перед тем как думать о реализации EAV варианта ( хар-ка значение - отдельная таблица), подумайте как Вы собираетесь решать в нем выборки вида "комары породы БББ отсутствующие в регионах ЗЗЗ и ЙЙЙ, но присутствующие в ООО". Если выборки "присутствия" относительно легки в EAV, то вот выборки "отсутствия" в EAV уже достаточно тяжелы, при стандартной реализации.
Размер БД мы не знаем, а так же метод управления. В моём варианте можно будет легко редактировать через phpmyadmin.
Но так, конечно если там записей будет мульёны, то лучше вынести в отдельную таблицу, ну и всё что писали выше.
edogs, спасибо за развернутый ответ. Понял, что можно сделать грамотнее, чем 50 столбцов, но это уже сильно выше моего теперешнего уровня. При этом записей всего порядка 20000 (не так уж и много у нас комаров-то), поэтому пашет покамест норм.
Насчет отсутствия и, в меньшей степени, варианта «и» сейчас сам уже загрузился, перевожу таблицу, которая была Id Характеристика Значение, тоже в море столбцов.
edogs, а как это трамбуйте? По задаче Пифагоровы штаны в любую сторону 50 значений. И мне виделось не TINYINT, а ENUM.