Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подчиненная таблица или FIND_IN_SET? / 2 сообщений из 2, страница 1 из 1
09.06.2018, 09:19
    #39658702
A-MaR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная таблица или FIND_IN_SET?
Имеется таблица привязки кошельков к товарам, импортируемая из внешних источников
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE prod_product_moneybags (
  ProductId int(10) UNSIGNED NOT NULL DEFAULT 0,
  MoneybagId tinyint(3) UNSIGNED NOT NULL DEFAULT 0,
  Checked tinyint(1) UNSIGNED DEFAULT 0,
  PRIMARY KEY (ProductId, MoneybagId),
  CONSTRAINT FK_ppm_products FOREIGN KEY (ProductId)
  REFERENCES prod_products (ProductId) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT FK_ppm_moneybags FOREIGN KEY (MoneybagId)
  REFERENCES ref_moneybags (MoneybagId) ON DELETE CASCADE ON UPDATE CASCADE
)
ENGINE = INNODB
CHARACTER SET cp1251
COLLATE cp1251_general_ci;



Отсутствие кошелька в списке означает, что он явно не назначен товару. Но, например, у наличных есть признак AutoAssignProducts (Автоматически назначать товарам) - в этом случае он также доступен.
Checked = 0 означает явный запрет, даже если у кошелька есть признак AutoAssignProducts.
Для оценки возможности оплаты я делаю JOIN этой таблицы со справочником кошельков и оцениваю Checked и AutoAssignProducts.

Думаю избавиться от этой таблицы и добавить в справочник товаров 2 поля: MoneybagsList и DisabledList, в первом перечислить MoneybagId с Checked=1, во втором соответственно с 0. Т.е. для оценки возможности оплаты необходимо будет извлечь эти 2 поля и пройтись по справочнику кошельков, добавив в условие 2 раза FIND_IN_SET.

1. Будет ли вариант с FIND_IN_SET принципиально быстрее?
2. В общем случае кошельков может быть до 30 штук с трехзначными кодами, т.е. длины полей будут за 100, селективность - у разных клиентов по-разному, но у большинства набор кошельков будет идентичным. Т.е. на первый взгляд индексы по этим полям нежелательны. Не будет ли FIND_IN_SET тормозить без индексов?
...
Рейтинг: 0 / 0
09.06.2018, 09:23
    #39658706
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненная таблица или FIND_IN_SET?
A-MaR1. Будет ли вариант с FIND_IN_SET принципиально быстрее?Он будет принципиально медленнее.
A-MaRНе будет ли FIND_IN_SET тормозить без индексов?Он и с индексами будет тормозить. Функция в условии связывания/отбора исключает использование индекса.
A-MaRПодчиненная таблица или FIND_IN_SET?Таблица однозначно.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подчиненная таблица или FIND_IN_SET? / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]