我使用WordPress和一些定制的post类型(只是为了描述我的DB结构-它的WP)。
每个post都有自定义元,它存储在单独的表(postmeta表)中。在我的例子中,我存储的是城市和州。
我将一些操作添加到WP的save_post/trash_post挂钩中,以便城市和州也存储在一个单独的表(城市)中,如下所示:
ID postID city state
auto int varchar varchar我这样做是因为我认为这个表比查询相当大的postmeta表获得可用的城市和州列表要快。
我的逻辑还迫使我为每个帖子添加/更新城市和州,即使这会导致重复(在城市/州字段)。这必须是因为我必须跟踪哪些州/城市存在(实际上有一个与它们相关的帖子)。当一个帖子被添加或删除时,它会将它的记录带往或从城市表中取出。
这使我想到我的问题。
编辑到目前为止的评论/答案:
表的结构正是我在上面输入它的方式。ID上有一个索引,但这个表的要点不是检索索引列表,而是检索所有可用城市/州组合列表的所有结果(是唯一的)。
--我想我可能会使用(我不知道为什么以前没有想到这一点)--只是在wp_options表中的一个记录中添加一个城市/州组合的序列化列表。然后我就能得到那张唱片,过滤掉我需要的唯一记录。我能得到一些反馈吗?,我可以想象,检索和过滤序列化数组比将数据存储在单独的表中进行检索要快。
发布于 2013-04-26 17:28:01
要回答关于使用SELECT distinct还是array_unique的问题,我要说的是,我几乎总是希望限制数据库中的结果集,前提是您在试图获得不同值的字段上有一个适当的索引。这将节省您将额外数据从DB传输到应用程序以及应用程序将该数据读取到内存中的时间,以便您可以在内存中使用该数据。
就您单独的表设计而言,很难推测这是否是一种好方法,这在很大程度上取决于您实际上是如何预先形成查询的(也就是说,您是在执行两个单独的查询--一个查询post信息,另一个查询城市/州信息或查询连接)。
这实际上只是确定什么是最快的方法的一种明确的方法。这就是在您的环境中测试两种方法。
发布于 2013-04-26 17:43:34
1)完全规范化表(当它只有整数值,其他表只有一个int+varchar时)在不经常执行完整表联接和对规范化字段进行大量搜索时具有优势。缺点是,它需要大量的连接/排序缓冲区,并导致更复杂的queries=much,更少的机会查询将由mysql自动优化。因此,您可以自己优化查询。
2)几乎在任何情况下,选择distinct都会更快。只有在速度较慢的情况下,才能在/etc/my.conf中使用大小较小的排序缓冲区,而对于php则有更大的内存缓冲区。
不同的选择可以使用索引,而您的代码不能。也发送大量的数据到您的应用程序需要大量的mysql cpu时间和实时。
https://stackoverflow.com/questions/16241947
复制相似问题