Запомни меня индексы таблиц

Я создаю таблицу в MariaDB для хранения значений cookie-файлов «запомнить меня»:

CREATE TABLE u_remember_me (
    u_user_common_id INT UNSIGNED NOT NULL,
    lookup_key       VARCHAR(30) NOT NULL,
    token_hash       VARCHAR(30) NOT NULL,
    created          DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,

    INDEX (u_user_common_id),
    FOREIGN KEY (u_user_common_id) REFERENCES u_user_common (id) ON DELETE CASCADE ON UPDATE CASCADE,
    PRIMARY KEY (lookup_key),
    UNIQUE KEY (lookup_key, token_hash)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci ENGINE InnoDB;

Я всегда буду искать по полю lookup_key и поэтому выбрал его в качестве первичного ключа (случайная строка). Столбец u_user_common_id не может быть установлен в качестве первичного ключа, поскольку пользователю может быть назначено несколько (lookup_key, token_hash) из-за нескольких браузеров или компьютеров. Является ли lookup_key плохим выбором для первичного ключа (производительность, вставка и т. д.?). Также .. Должен ли я вместо этого установить первичный ключ на (lookup_key, token_hash) и отказаться от ограничения UNIQUE? Причина, по которой я решил не использовать суррогатный ключ, заключается в том, что он никогда не будет использоваться, но я не уверен, что это хорошее решение (мне все равно нужно индексировать lookup_key).

Привет, @TankSneeze, добро пожаловать в Stack Overflow. Учитывая характер вашего вопроса, я считаю, что вам следует разместить его под dba.stackexchange.com, а не здесь.

Marcello Grechi Lins 19.09.2018 18:26

Вы заявляете, что «Я всегда буду искать по lookup_key», так что это все, что вам действительно нужно в индексе. Если вы не запрашиваете другие столбцы, вы можете просто использовать lookup_key в качестве единственного столбца в индексе, чтобы ваши индексы не стали слишком раздутыми.

RToyo 19.09.2018 18:28

Большое спасибо @MarcelloGrechiLins :) Также спасибо за подсказку о неправильном месте для публикации :) Извините за это! И тебе тоже спасибо, @RToyo! Я, вероятно, могу отказаться от ограничения UNIQUE, поскольку не имеет значения, имеют ли два пользователя одинаковый token_hash (даже если это маловероятно). Таким образом я могу сэкономить ненужное пространство для дополнительного индекса.

TankSneeze 19.09.2018 18:44
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
52
1

Ответы 1

Думаю, вы не догадались, что от чего зависит.

Связан ли lookup_key (случайная строка) с одним пользователем? Если да, то PRIMARY KEY(lookup_key) и избавьтесь от token_hash.

Если пользователь может подключаться из разных браузеров а также, вы хотите, чтобы произошло что-то другое, значит, вы не указали какие-либо данные, которые будут отличаться.

Другие вопросы по теме