@garikm

Какой вариант быстрее составной primary или AUTO_INCREMENT + составной UNIQUE INDEX?

Данные (кол. записей):
product ~ 100К
product_rel ~ 3M

Запросы:
INSERT, UPDATE - отсутствуют
Обычно выполняются, запросы типа:
SELECT p.*,pr.rating
FROM product_rel pr
JOIN product p ON(pr.product_id_2 = p.id)
WHERE pr.product_id_1 = 12345
ORDER BY pr.rating

Какой вариант лучше(быстрее) при запросах(SELECT), и какой тип БД (MYISAM,INNODB) выбрать

CREATE TABLE product_rel(
product_id_1 MEDIUMINT(9) UNSIGNED NOT NULL DEFAULT 0,
product_id_2 MEDIUMINT(9) UNSIGNED NOT NULL DEFAULT 0,
rating FLOAT(9, 9) UNSIGNED NOT NULL DEFAULT 0.000000000,
PRIMARY KEY (product_id_1, product_id_2),
INDEX IX_product_rel_product_id_2 (product_id_2)
)

или

CREATE TABLE product_rel(
id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
product_id_1 MEDIUMINT(9) UNSIGNED NOT NULL DEFAULT 0,
product_id_2 MEDIUMINT(9) UNSIGNED NOT NULL DEFAULT 0,
rating FLOAT(9, 9) UNSIGNED NOT NULL DEFAULT 0.000000000,
PRIMARY KEY (id),
UNIQUE INDEX UK_product_rel (product_id_1, product_id_2),
INDEX IX_product_rel_product_id_2 (product_id_2)
)
  • Вопрос задан
  • 352 просмотра
Пригласить эксперта
Ответы на вопрос 1
@napa3um
Второй вариант гипотетически будет незначительно быстрее, но выбирать стОит из соображений бизнес-логики - где во вне БД будут использоваться ключи таблицы? Делайте как удобнее, не задумываясь о скорости. Либо протестируйте скорость, если считаете, что это будет узким местом в системе.

(Судя по всему, это таблица по смыслу что-то типа "с этим продуктом также покупают...", я бы для такого использовал первый вариант, не заморачиваясь с отдельным ID.)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы