我有一个大型SQL Server数据库,包含大约40列和数亿行。
这个表在模式中应该是松散的,因此我有很多列作为VARCHAR(MAX),即使它可能是BIGINT,DATETIME,INT等。这对查询时间/效率有影响吗?例如将
SELECT TOP 100 * FROM CustomerId = 34343
快于
SELECT TOP 100 * FROM CustomerId = '34343'
?如果是的话,快多少?
如果我使用VARCHAR(MAX)而不是固定长度VARCHAR怎么办? 那么像mySQL等其他数据库在这方面呢?
答案 0 :(得分:3)
是的,比较字符串通常比比较纯数字要慢。它是否可测量取决于查询执行引擎如何进行比较。如果查询引擎没有与字符串的结尾相比 - 它通常不会,那么你的惩罚就不是很好。试试看吧。但从理论上讲,数字量的数字比较会更好。
答案 1 :(得分:2)
是的,使用INT与VARCHAR(MAX)进行比较肯定会带来性能上的好处。没有实际测量,真的很难说多少。
此外 - 没有理由不使用VARCHAR(MAX)
- 但只有在需要时才有意义!
请参阅:
出于一些很好的理由,为什么你不应该只做一切VARCHAR(MAX) - 只是因为你可以....
答案 2 :(得分:1)
如果我改用VARCHAR(MAX)怎么办? 固定长度VARCHAR ..还有什么 关于其他数据库,如mySQL等 这方面呢?
VARCHAR(n)
视为TEXT CHECK(LENGTH(Column) <= n)
。指定最大长度没有性能优势。VARCHAR
列的长度限制。VARCHAR(MAX)
列上创建索引,这会降低性能。