SQL数据库中的长字符串替代?

时间:2013-10-04 08:45:42

标签: php sql database

我们正在创建一个网站,用户可以在其中创建特定的个人资料。目前我们已经拥有大约662000个配置文件(我们数据库中的记录)。用户可以将某些关键字(分为5类)链接到他们的个人资料。他们可以链接每个类别大约1250个关键字(不,这不是废话,对于某些配置文件,这实际上是有意义的)。目前,我们将这些关键字保存到数组中,并将序列化数组插入数据库中的配置文件记录中。

当其他用户使用搜索功能并搜索其中一个关键字时,将使用“WHERE keyword LIKE%keyword%”执行SQL查询。这意味着必须转到相当多的记录并遍历每个记录的整个序列化数组。在关键字列中添加索引非常棘手,因为它们没有定义的最大长度(这可能是22000+个字符!)。

还有其他更明智和实用的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

从不,永远不会在一列中存储多个值!

使用映射表

user_keywords TABLE
--------------------
user_id       INT
keyword_id    INT


users         TABLE
---------------------
id            INT
name          VARCHAR
...


keywords      TABLE
---------------------
id            INT
name          VARCHAR
...

然后,您可以返回在其个人资料中具有特定关键字的所有用户,例如

select u.* 
from users u
inner join user_keywords uk on uk.user_id = u.id
inner join keywords k on uk.keyword_id = k.id 
where k.name = 'keyword_name'

答案 1 :(得分:0)

由于您正在处理大数据,您应该使用NoSQL数据库,例如Hadoop / Hbase,Cassandra等。您还应该看看Lucene / Solr ...

http://nosql-database.org/