Кажется, вы спрашиваете разницу между:
MYTABLE
id integer primary key autoincrement
clientid integer
blogid integer
mentionid integer
-- with a unique composite index on (clientid, blogid, mentionid) and three foreign key constraints
и
MYTABLE
clientid
blogid
mentionid
-- with a composite primary key on (clientid, blogid, mentionid) and three foreign key constraints
и
MYTABLE
id integer primary key autoincrement
clientid integer
blogid integer
mentionid integer
with an index on clientid and also an index on blogid and the three foreign key constraints
Во-первых, у вас есть индекс целочисленного первичного ключа, а также альтернативный уникальный индекс в триаде. Если второе, у вас есть только уникальный индекс триадического первичного ключа. В-третьих, у вас есть уникальный индекс по целочисленному первичному ключу и два других неуникальных индекса, один для клиентов и другой для блогов.
Прирост производительности при незначительно большей эффективности второго варианта будет минимальный , и поэтому я буду основывать решение на других факторах. Третий является наиболее гибким с точки зрения запросов и предлагает большую простоту кодирования; он предлагает преимущества индексов на клиенте и блоге, если вы хотите получить запрос с блогом, а не с клиентом, в предложении WHERE. Что касается кодирования, некоторые инструменты с графическим интерфейсом и промежуточное программное обеспечение имеют проблемы с первичными ключами, состоящими из нескольких частей, и ваша логика обновления / вставки / удаления будет проще, если она будет иметь дело с одним целочисленным столбцом PK. Я обнаружил, что простота кода и простота обслуживания гораздо лучше, чем несколько секунд или всего несколько долей секунды улучшения времени ответа на запрос.