我正在开发一个需要具有多个主键的数据库的应用程序。它的架构将包含类似的内容:
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数据库但我不知道这是否是我需要的,因为我需要的数据库是完全关系的
编辑:它必须是免费解决方案,我必须能够在国内计算机上运行
答案 0 :(得分:0)
我认为添加太多主键不是你的解决方案。请注意,通常主键具有大小限制,因此您将很快碰到路障。
您可能需要的是非聚集索引或特定于供应商的技术,例如MS SQL Server中的全文搜索,它可以创建(IMO和经验丰富的)非常高效的索引