【发布时间】:2011-06-11 17:54:33
【问题描述】:
对于一个有点像杂志的网站,我有 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 列一起用作 Article 表的集群主 y。并且 userId 和 userName 作为用户表的主键。 因为搜索将基于 titlehash 和 userName 列。
另外,titlehash 和 userName 在设计上是独立的,不会正常更改。
articleId 和 userid 列不是业务键,对应用程序不可见,因此它们仅用于联接。
我将在 titlehash 列上使用 mysql 表分区,这样选择会更快,因为 db 将能够使用基于该列的分区消除。
我使用innoDB作为存储引擎;
这是我的问题;
我是否需要创建另一个索引 titlehash 列作为主要列 键(articleId,titlehash)不是 有利于搜索 titlehash 列,因为它是第二个 主键上的列?
这有什么问题 设计?
我需要选择非常快,并且希望表格有数百万行,请注意 int Id 列对业务层不可见,并且永远不能用于查找记录
我是 sql server 背景,打算使用 mysql,因为在 sql server 上使用分区会花费我一大笔钱,因为它只在企业版中可用。
所以 DB 大师,请帮助我;非常感谢。
【问题讨论】:
标签: mysql database-design indexing partitioning