我有一个Key / Value表我用来存储可以是文本或数字的数据,但没有别的。
在初步测试中,我在将citeria应用于sql_variant列时看到可怕的性能,例如:
SELECT * FROM MY_DATA WHERE
MY_ENTITY_TYPE = 555
AND CAST(MY_SQL_VARIANT_COLUMN AS NUMERIC) = 2254
所以很明显会出现这样的查询,但我看到的查询时间超过10秒,表中只有几千行。
考虑到我只会存储数字或文本数据,使用varchar(255)列会更合理吗?这样,选择性能应该很快,我只需要选择CAST来将数据转换为正确的数据类型。
答案 0 :(得分:1)
请原谅我,但键/值表听起来像许多人在某些时候尝试的超级通用数据库(我做过!)并且它根本不能正常工作。
您确定无法预测密钥并定义一个表,其中键是列,行是相关的值吗?
答案 1 :(得分:0)
以下是解决此性能问题的两种方法:
CAST标准值而不是列:
SELECT * FROM MY_DATA WHERE
MY_ENTITY_TYPE = 555
AND MY_SQL_VARIANT_COLUMN = CAST(2254 AS NUMERIC)
将索引添加到表中的其他列,看看它是否神奇地修复了问题。例如,向MY_ENTITY_TYPE添加索引,尽管没有将标准应用于此列,但它清除了我的示例中的性能问题。
显然,#1是两者中最好的。