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

Mysql 用于存储多个主键的数据库;sql与nosql,mysql,database,primary-key,nosql,Mysql,Database,Primary Key,Nosql,我正在开发一个应用程序,它需要一个包含多个主键的数据库。其架构将包括以下内容: PK == Primary Key | column1 | column2(PK) | columns3(PK) | column4(PK) | column5(PK) --------------------------------------------------------------------------- row1 | word | string | stri

我正在开发一个应用程序,它需要一个包含多个主键的数据库。其架构将包括以下内容:

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
SELECT word 
FROM table 
WHERE columnN = 'string' 
LIMIT 1;
应用程序将向数据库请求与指定字符串对应的单词(在第1列中)。该查询类似于:

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
SELECT word 
FROM table 
WHERE columnN = 'string' 
LIMIT 1;
其中,
word
是第1列上的单词,
columnN
是第1、2、3、4或5列,
string
是可以包含在
columnN

数据库将包含数百万行,因此我需要多个主键才能快速获取与字符串对应的
单词

我已经创建了一个具有这种结构的数据库(但在
列2
上只有一个主键)和3000000行。当我用主键搜索与列中包含的字符串相对应的单词时,DB会在不到半秒的时间内响应我,但如果我搜索与不带主键的列中包含的字符串相对应的单词,DB会在半小时以上响应我(不可接受)

所以我的问题是:

我应该如何构造数据库,以便独立于包含字符串的列快速获得响应

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


编辑:它必须是免费的解决方案,而且我必须能够在家用计算机上运行它

我认为添加太多主键不是您的解决方案。请注意,通常主关键点有大小限制,因此您迟早会遇到路障


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

Thaks leo,但我需要一个免费的解决方案,我必须能够在树莓上实现这一点-Pi@SalvaCorts不客气,但是……你这是什么意思“自由解决方案"? Oracle支持类似的东西,顺便说一句,叫做Oracle文本和MySQL。我的意思是,在没有成本的情况下,我一直在使用MySQL,我遇到了这个问题。你认为Oracle文本将是答案吗?@Leo-我认为在像
columnN='string'
这样的比较中不需要全文搜索。索引应该可以很容易地完成这项工作trick@ughai这就是我的意思,它是一个完整的关系数据库,所以正如我所说的,如果
columnN
column2
(我在工作室创建的唯一PK),它会给我
这个词
快,但是如果
columnN
与2不同,这需要很多时间。你的问题不是关于主键。你要找的是索引/唯一索引。尝试在所有
列n
列上创建索引,然后测试性能。请删除sql server标记,因为应用程序不在Windows操作系统上运行。