sql-server – SQL Server上大型EAV /开放架构系统的性能

前端之家收集整理的这篇文章主要介绍了sql-server – SQL Server上大型EAV /开放架构系统的性能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有人在sql Server中实现了非常大的EAV或开放架构样式数据库?我想知道是否有性能问题,以及如何克服这些障碍.

解决方法

无论MS sql Server与任何其他品牌的数据库无关,EAV最糟糕的性能问题是人们尝试使用怪物查询重建单个行上的实体.这需要每个属性单独连接.
SELECT e.id,a1.attr_value as "cost",a2.attr_value as "color",a3.attr_value as "size",. . .
FROM entity e
  LEFT OUTER JOIN attrib a1 ON (e.entity_id = a1.entity_id AND a1.attr_name = 'cost')
  LEFT OUTER JOIN attrib a2 ON (e.entity_id = a2.entity_id AND a2.attr_name = 'color')
  LEFT OUTER JOIN attrib a2 ON (e.entity_id = a3.entity_id AND a3.attr_name = 'size')
  . . . additional joins for each attribute . . .

无论您使用什么数据库品牌,查询中的多个连接都意味着几何增加性能成本.不可避免地,您需要足够的属性来超越任何sql引擎的架构容量.

解决方案是以行而不是列取出属性,并在应用程序代码中编写一个类,以循环遍历这些行,将值分配给对象属性.

SELECT e.id,a.attr_name,a.attr_value
FROM entity e JOIN attrib a USING (entity_id)
ORDER BY e.id;

这个SQL查询是如此简单和更有效率,它弥补了额外的应用程序代码.

我在EAV框架中寻找的是一些样板代码,用于检索这样的多行结果集,并将属性映射到对象属性中,然后返回填充对象的集合.

原文链接:https://www.f2er.com/mssql/75406.html

猜你在找的MsSQL相关文章