【发布时间】:2020-06-22 15:29:53
【问题描述】:
我需要优化的查询如下:
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 = '?')
按照上述查询的解释结果:
[解释选择结果][1]
以及来自字段查询的 SHOW INDEXES 的结果:
[表名字段中现有索引的结果][2]
我不仅有这么大的表,而且由于这个数据库属于一个drupal 7站点,所以表比较多,所以性能真的很慢。 你建议我做哪个索引?我应该如何处理现有的索引?
SHOW VARIABLES LIKE "%version%"; 返回 5.7.29
[从节点显示索引的结果;][3]
[DESCRIBE 节点的结果;][4]
[DESCRIBE 字段的结果;][5]
我测试了下面的答案,它与我的第一次试验不同: (bundle、entity_type、deleted、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
【问题讨论】:
-
每张表的主键是什么?这些表还有哪些其他键或索引?
-
我添加了一些可能有帮助的信息