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操作系统上运行。