用于存储多个主键的数据库; sql vs nosql

时间:2015-05-01 08:48:52

标签: mysql database primary-key nosql

我正在开发一个需要具有多个主键的数据库的应用程序。它的架构将包含类似的内容:

PK == Primary Key

         | column1 | column2(PK) | columns3(PK) | column4(PK) | column5(PK)
---------------------------------------------------------------------------
row1     | word    | string      | string       | string      |  string
---------------------------------------------------------------------------
row2     | word    | string      | string       | string      |  string
---------------------------------------------------------------------------
row3     | word    | string      | string       | string      |  string
---------------------------------------------------------------------------
row4     | word    | string      | string       | string      |  string
---------------------------------------------------------------------------
row5     | word    | string      | string       | string      |  string
---------------------------------------------------------------------------
rowN     | word    | string      | string       | string      |  string

应用程序将向数据库询问与指定字符串对应的Word(在column1中)。查询将是这样的:

SELECT word 
FROM table 
WHERE columnN = 'string' 
LIMIT 1;

其中word是第1列上的字,columnN是第1,2,3,4或5列,string是可以包含在columnN中的字符串}

数据库将包含数百万行,因此我需要更多的主键才能获得与字符串对应的word非常快。

我创建了一个具有此结构的数据库(但column2上只有一个主键)和3,000,000行。当我使用主键搜索与列中包含的字符串对应的单词时,DB会在不到半秒的时间内响应我,但如果我搜索与没有主键的列中包含的字符串相对应的单词,则DB超过半小时(不可接受)回应我

所以我的问题是:

如何构建数据库以便独立于包含字符串的列快速获取响应?

我一直在阅读关于noSql数据库但我不知道这是否是我需要的,因为我需要的数据库是完全关系的

编辑:它必须是免费解决方案,我必须能够在国内计算机上运行

1 个答案:

答案 0 :(得分:0)

我认为添加太多主键不是你的解决方案。请注意,通常主键具有大小限制,因此您将很快碰到路障。

您可能需要的是非聚集索引或特定于供应商的技术,例如MS SQL Server中的全文搜索,它可以创建(IMO和经验丰富的)非常高效的索引