Рассмотрите таблицу products
, которая содержит информацию о продукте, включая ее категорию. Один продукт может принадлежать нескольким категориям, поэтому я сохраняю его как список идентификаторов категорий, разделенный запятыми.MYSQL разделенные запятыми идентификаторы против отдельной таблицы
Я знаю, что это не нормализованный подход.
Может ли любой эксперт MYSQL сказать мне, какой подход будет быстрее для выбора продуктов определенной категории.
Очевидно, что мы должны ПРИСОЕДИНЯЙТЕСЬ products
стол и products_category_relation
стол, если принять нормализованный подход.
И
В моем подходе мы должны написать как запрос, чтобы найти продукты (предположим, что мы ищем идентификатор категории 10)
SELECT p.*
FROM products p
WHERE p.category like '10'
OR p.category like '10,%'
OR p.category like '%,10'
OR p.category like '%,10,%'
Может ли один скажите мне, если этот подход быстрее или подход JOIN будет быстрее?
Я знаю о нормализации. Я знаю о других рисках, связанных с моим подходом. Но в моем случае это не имеет значения. Итак, я обеспокоен скоростью.
Любое теоретическое объяснение относительно его скорости или практического результата испытаний приветствуется.
UPDATE
Я использую MyISAM двигатель таблица продукт имеет первичный ключ product_id
индекс полнотекстовый на category
колонке таблицы products
«Это также потребует больше места на диске, так как номера, как правило, более дорогие, когда сохраняются как» @EmilVikstrom, я думаю, что это верно для больших чисел. обычно идентификатор категории не превышает 3 символов. – Imdad
Imdad, в этом случае используйте 'UNSIGNED SMALLINT', который использует 2 байта и имеет диапазон от' 0' до '65535'. –
Насколько ваш ответ кажется лучше других. +1 – Imdad