【发布时间】:2012-06-10 18:43:47
【问题描述】:
这是一个具体的例子:
Wordpress 将用户信息(元)存储在一个名为 wp_usermeta 的表中,您可以在其中获取元键字段(例如:名字)和元值(约翰)
但是,仅在 50 个左右的用户之后,该表已经打包了大约 1219 条记录。
所以,我的问题是:从性能角度来看,将所有元数据作为一个字段的表,还是像 WordPress 那样将所有元数据作为一行的表更好?
在这两种情况下都正确设置了索引。几乎不需要添加新的元数据。请记住,像 wp_usermeta 这样的表必须使用文本/长文本字段类型(大占用空间)才能容纳可以输入的任何类型的数据。
我的假设是,只有当您不知道用户可能需要什么时,WordPress 方法才有效。否则:
- 检索所有元数据需要更多 I/O,因为字段未存储在单行中。该字段未优化。
- 如果没有重大缺陷(索引长文本?除非它是部分索引...但是那么,要多长时间?),您不能真正在 meta_value 字段上建立索引。
- 很快,您的数据库就会变得杂乱无章,即使是最精确的元数据也会诅咒您的研究
- 不存在对开发人员友好的情况。您无法真正发出加入请求来获得所需的一切并正确显示。
不过,我可能遗漏了一点。我不是数据库工程师,我只知道 SQL 的基础知识。
【问题讨论】:
标签: mysql sql database-design scalability entity-attribute-value