我正在使用带有一些自定义帖子类型的 WordPress(只是为了描述我的数据库结构 - 它的 WP)。
每个帖子都有自定义元,它存储在一个单独的表(postmeta 表)中。就我而言,我正在存储城市和州。
我在 WP 的 save_post/trash_post 挂钩中添加了一些操作,以便城市和州也存储在单独的表(城市)中,如下所示:
ID postID city state
auto int varchar varchar
我这样做是因为我认为这个表比查询相当大的 postmeta 表来获取可用城市和州的列表要快。
我的逻辑还迫使我为每个帖子添加/更新城市和州,即使这会导致重复(在城市/州字段中)。必须如此,因为我必须跟踪存在哪些州/城市(实际上有一个与之相关的帖子)。添加或删除帖子时,它会将其记录与它一起传入或传出城市表。
这让我想到了我的问题。
- 这个逻辑有意义还是我不擅长数据库设计?
- 如果它确实有意义,我真正的问题是:**使用 MySQL 的“SELECT DISTINCT”还是只使用“SELECT *”然后在结果上使用 PHP 的 array_unique 会更快吗?**
迄今为止对评论/答案的编辑:
表格的结构正是我在上面输入的方式。ID 上有一个索引,但该表的目的不是检索索引列表,而是检索所有可用城市/州组合列表的所有结果(唯一)。
我想我可能会选择(我不知道为什么我以前没有想到这一点)只是在 wp_options 表的 ONE 记录中添加一个城市/州组合的序列化列表。然后我可以获取该记录,并过滤掉我需要的唯一记录。我能得到一些反馈吗?我想检索和过滤序列化数组会比将数据存储在单独的表中进行检索更快。