需要为超过 200 万条记录的 table 创建高效索引

need to create an efficient index for a table with more than 2 million records

我需要优化的查询如下:

 SELECT  field0.entity_type AS entity_type,
                field0.entity_id AS entity_id, field0.revision_id AS revision_id,
                field0.bundle AS bundle
            FROM  field field0
            INNER JOIN  node node  ON node.nid = field0.entity_id
            WHERE  (field0.field_value = '23ad')
              AND  (field0.deleted = '0')
              AND  (node.status = '1')
              AND  (field0.entity_type = 'node')
              AND  (field0.bundle = 'title')

查询的以下部分始终相同:

AND  (field0.deleted = '0')
          AND  (node.status = '1')
          AND  (field0.entity_type = 'node')
          AND  (field0.bundle = 'title')

唯一改变的行是:

WHERE  (field0.field_value = '?')

遵循上述查询的解释结果:

[解释 select 结果][1]

SHOW INDEXES 来自字段查询的结果:

[table 命名字段中现有索引的结果][2]

不仅我有这么大的 table,而且由于这个数据库属于 drupal 7 站点,还有更多的 table,所以性能真的很慢。 你建议我做哪个索引?我应该如何处理现有索引?

SHOW VARIABLES LIKE "%version%"; returns 5.7.29

[来自节点的 SHOW INDEXES 结果;][3]

[DESCRIBE 节点的结果;][4]

[DESCRIBE 字段的结果;][5]

我测试了以下答案,它与我的第一次试验不同: (捆绑,entity_type,已删除,field_tl_uuid_value,entity_id,revision_id)。两者都给我结果,我应该选择哪个,为什么? [1]: https://i.stack.imgur.com/lfcn6.png [2]: https://i.stack.imgur.com/qXsPt.png [3]: https://i.stack.imgur.com/5w9lD.png [4]: https://i.stack.imgur.com/fTRDY.png [5]: https://i.stack.imgur.com/KvRVX.png

您的查询将受益于以下索引:

create index on field (bundle, entity_type, deleted, field_value);