Php 用MYSQL存储索引列表?
我有一个与MySQL/PHP性能相关的问题 我需要在表中存储与每条记录关联的索引列表。每个列表包含1000个索引。我需要能够快速访问列表中与给定记录关联的任何索引值。我不知道最好的办法是什么。我想到了以下方法,希望您能提供意见:Php 用MYSQL存储索引列表?,php,mysql,Php,Mysql,我有一个与MySQL/PHP性能相关的问题 我需要在表中存储与每条记录关联的索引列表。每个列表包含1000个索引。我需要能够快速访问列表中与给定记录关联的任何索引值。我不知道最好的办法是什么。我想到了以下方法,希望您能提供意见: 将列表以字符串形式存储为逗号分隔的值列表或使用JSON。性能可能很糟糕,因为我需要将整个列表从DB提取到PHP,只检索一个值。解析字符串也不会很快。。。我可以在PHP端使用最少的缓存中存储大量扩展列表,以减少负载 制作一个包含1001列的列表表,用于存储列表及其主键。我
您对此有何看法?标准解决方案是创建另一个表,每个表有一行(记录、索引),并添加一个MySQL索引以允许快速搜索
CREATE TABLE IF NOT EXISTS `table_list` (
`IDrecord` int(11) NOT NULL,
`item` int(11) NOT NULL,
KEY `IDrecord` (`IDrecord`)
)
根据您的需要更改
项的类型-我在示例中使用了int
。好的一对多关系如何
records
-------
id int
record ...
indices
-------
record_id int
index varchar
然后:
最合乎逻辑的解决方案是将每个值放入它自己的元组中。向每个元组添加一个MYSQL索引将使DBMS能够快速确定值,并应提高性能
我们不同意你的其他答案的原因如下:
选择1
在一个MYSQL单元中存储多个值违反了数据库规范化的第一阶段。你可以仔细阅读
选择3
这严重依赖于其他文件。您希望尽可能地本地化您的数据存储,以便将来更易于维护。选项一将严重违反数据库规范化规则,因此您将被排除在外:)
SELECT *
FROM records
LEFT JOIN indices
ON records.id = indices.record_id
WHERE indices.index = 'foo'