【发布时间】:2019-02-15 02:17:03
【问题描述】:
我的目录站点目前使用"toxi" table structure 来标记列表。
我的帖子表有大约 500 万条记录,而地图表有大约 1500 万条记录。
我使用术语来存储各种信息,例如作者、出版商、主题、媒体(例如音频、视频等)。并且一个帖子可以为每个分类有多个多个术语(多个作者、多个主题等)。
基于单个 term_id 搜索帖子大约需要 4 秒才能返回结果,这非常糟糕,但使用多个术语返回结果需要 40 秒。
我需要一个更有效的解决方案,但我不知道是我的查询效率低下还是我的表结构。
== 单项搜索查询 ==
SELECT * FROM posts
LEFT JOIN post_taxonomy_term_map ON (posts.ID = post_taxonomy_term_map.object_id)
WHERE post_taxonomy_term_map.term_id=$term1
== 多词搜索查询 ==
SELECT p.*
FROM post_taxonomy_term_map m, posts p
WHERE m.term_id IN ($term1, $term2, $term3)
AND p.ID = m.object_id
GROUP BY p.ID
HAVING COUNT( p.ID )=3
表格和列
帖子 { ID、post_title 等...}
主 ID
taxonomy_terms { term_id、term_label、term_slug 等 }
主要术语_id
post_taxonomy_term_map { map_id, object_id, taxonomy, term_id}
PRIMARY map_id
INDEX object_id
INDEX term_id
索引分类
注意:post_taxonomy_term_map.object_id 与 posts.ID 值相关
【问题讨论】:
-
使用正确的
GROUP BY。