У меня есть 2 таблицы MySQL со следующими схемами для веб-сайта, похожего на журнал.
Article (articleId int auto increment ,
title varchar(100),
titleHash guid -- a hash of the title
articleText varchar(4000)
userId int)
User (userId int autoincrement
userName varchar(30)
email etc...)
Самый важный запрос:
select title,articleText,userName,email
from Article inner join user
on article.userId = user.UserId
where titleHash = <some hash>
Я думаю об использовании вместе столбцов articleId и titleHash в качестве кластеризованного первичного y для таблицы Article. И userId, и userName в качестве первичного ключа для пользовательской таблицы.
Поскольку поиск будет основываться на столбцах titlehash и userName.
Кроме того, titlehash и userName не являются обязательными по конструкции и не изменяются в обычном режиме.
Столбцы articleId и userid не являются бизнес-ключами и не видны приложению, поэтому они будут использоваться только для объединений.
Я собираюсь использовать разбиение таблиц mysql на столбце titlehash, чтобы выборки выполнялись быстрее, поскольку БД сможет использовать исключение разделов на основе этого столбца.
Я использую innoDB в качестве механизма хранения;
Итак, вот мои вопросы;
Нужно ли создавать еще один индекс
столбец titlehash в качестве основного
ключ (articleId, titlehash) не является
хорошо для поиска на
titlehash столбец как второй
столбец по первичному ключу?
Какие проблемы с этим
дизайн?
Мне нужно, чтобы операции выбора были очень быстрыми, и в таблицах ожидаются миллионы строк, и обратите внимание, что столбцы int Id не видны бизнес-уровню и никогда не могут использоваться для поиска записи.
Я из сервера SQL и собираюсь использовать mysql, поскольку использование разделов на сервере SQL обойдется мне в целое состояние, поскольку оно доступно только в редакции Enterprise.
Итак, гуру БД, пожалуйста, помогите мне; Большое спасибо.