我有与MySQL / PHP性能相关的问题。
我需要存储与表中每条记录关联的索引列表。每个列表包含1000个索引。我需要能够快速访问与给定记录关联的列表中的任何索引值。我不确定最好的方法。我已经想到了以下几种方式,并希望您对它们有所了解:
将列表作为逗号分隔值列表或使用JSON存储在字符串中。可能是糟糕的性能,因为我需要将整个列表从DB中提取到PHP只检索单个值。解析字符串也不会很快...我可以在PHP端的最低重用缓存中存储一些扩展列表以减少负载。
创建一个包含1001列的列表,用于存储列表及其主键。我不确定这对存储有多贵?这也像滥用系统一样。然后,如果我需要存储100000个索引怎么办?
只用SQL存储包含我的索引的二进制文件的名称并执行fopen(); FSEEK();的fread();每个访问的fclose()周期?不确定系统文件系统缓存将如何响应。如果它变坏了那么有很多解决方案可以解决这些问题...但这听起来有点矫枉过正吗?
你怎么看?
答案 0 :(得分:1)
标准解决方案是创建另一个表,每个(记录,索引)一行,并添加一个MySQL索引以允许快速搜索
CREATE TABLE IF NOT EXISTS `table_list` (
`IDrecord` int(11) NOT NULL,
`item` int(11) NOT NULL,
KEY `IDrecord` (`IDrecord`)
)
根据您的需要更改item
的类型 - 我在我的示例中使用了int
。
答案 1 :(得分:1)
一个好的旧的一对多关系怎么样?
records
-------
id int
record ...
indices
-------
record_id int
index varchar
然后:
SELECT *
FROM records
LEFT JOIN indices
ON records.id = indices.record_id
WHERE indices.index = 'foo'
答案 2 :(得分:0)
最合乎逻辑的解决方案是将每个值放在它自己的元组中。向每个元组添加MYSQL索引将使DBMS能够快速确定值,并且应该提高性能。
我们不同意您的其他答案的原因如下:
选项1
在一个MYSQL单元中存储多个值违反了数据库规范化的第一阶段。你可以阅读它here。
选项3
这严重依赖其他文件。您希望尽可能本地化您的数据存储,以便将来更容易维护。