Php 用MYSQL存储索引列表?

Php 用MYSQL存储索引列表?,php,mysql,Php,Mysql,我有一个与MySQL/PHP性能相关的问题 我需要在表中存储与每条记录关联的索引列表。每个列表包含1000个索引。我需要能够快速访问列表中与给定记录关联的任何索引值。我不知道最好的办法是什么。我想到了以下方法,希望您能提供意见: 将列表以字符串形式存储为逗号分隔的值列表或使用JSON。性能可能很糟糕,因为我需要将整个列表从DB提取到PHP,只检索一个值。解析字符串也不会很快。。。我可以在PHP端使用最少的缓存中存储大量扩展列表,以减少负载 制作一个包含1001列的列表表,用于存储列表及其主键。我

我有一个与MySQL/PHP性能相关的问题

我需要在表中存储与每条记录关联的索引列表。每个列表包含1000个索引。我需要能够快速访问列表中与给定记录关联的任何索引值。我不知道最好的办法是什么。我想到了以下方法,希望您能提供意见:

  • 将列表以字符串形式存储为逗号分隔的值列表或使用JSON。性能可能很糟糕,因为我需要将整个列表从DB提取到PHP,只检索一个值。解析字符串也不会很快。。。我可以在PHP端使用最少的缓存中存储大量扩展列表,以减少负载

  • 制作一个包含1001列的列表表,用于存储列表及其主键。我不确定这在存储方面的成本有多高?这也感觉像是滥用系统。然后,如果我需要存储100000个索引呢

  • 仅使用SQL存储包含我的索引的二进制文件的名称,并执行fopen();fseek();fread();每次访问的fclose()循环?不确定系统文件系统缓存将如何对此作出反应。如果情况不好,那么有很多解决方案可以解决这些问题。。。但这听起来有点过分不


  • 您对此有何看法?

    标准解决方案是创建另一个表,每个表有一行(记录、索引),并添加一个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'