Sql 对实体属性值数据的搜索
搜索EAV数据的最佳方法是什么?给定此表中存储的十几个字段,我需要能够搜索它们的任意组合:“琼斯”的姓氏和“斯普林菲尔德”的城市以及“1”的状态。有一个可以填写任何字段的搜索表单 显然,最终版本会更具动态性,但以下是我到目前为止得到的:Sql 对实体属性值数据的搜索,sql,tsql,entity-attribute-value,Sql,Tsql,Entity Attribute Value,搜索EAV数据的最佳方法是什么?给定此表中存储的十几个字段,我需要能够搜索它们的任意组合:“琼斯”的姓氏和“斯普林菲尔德”的城市以及“1”的状态。有一个可以填写任何字段的搜索表单 显然,最终版本会更具动态性,但以下是我到目前为止得到的: SELECT DISTINCT Utility.ClientSearch.ClientId AS ClientId, cs1.FieldValue AS FirstName, cs2.FieldValue AS City FROM Utilit
SELECT DISTINCT Utility.ClientSearch.ClientId AS ClientId,
cs1.FieldValue AS FirstName,
cs2.FieldValue AS City
FROM Utility.ClientSearch
LEFT OUTER JOIN Utility.ClientSearch AS cs1
ON cs1.ClientId = Utility.ClientSearch.ClientId
AND cs1.FieldName = 'LastName'
LEFT OUTER JOIN Utility.ClientSearch AS cs2
ON cs2.ClientId = Utility.ClientSearch.ClientId
AND cs2.FieldName = 'City'
WHERE (cs1.FieldValue = 'Jones')
AND (cs2.FieldValue = 'Springfield')
这似乎比一百万条记录快,但我想知道这是最有效的方法,还是有更好的方法
我意识到EAV不是一个好主意,但它不是我的应用程序。我只是在为其他人的应用程序编写一个查询包装器。我无法控制应用程序或其数据结构。我不确定为什么您必须三次自加入。。。第一张桌子不起作用
SELECT DISTINCT cs1.ClientId AS ClientId,
cs1.FieldValue AS FirstName,
cs2.FieldValue AS City
FROM Utility.ClientSearch AS cs1
INNER JOIN Utility.ClientSearch AS cs2
ON cs1.ClientId = cs2.ClientId
WHERE cs1.FieldName = 'LastName'
AND cs1.FieldValue = 'Jones'
AND cs2.FieldName = 'City'
AND cs2.FieldValue = 'Springfield'
如果您的表变得如此之大,以至于您开始看到性能问题,请查看ClientID上的表分区