查询优化 - VARCHAR相等与数字相等

时间:2010-08-09 06:02:34

标签: sql database-design optimization performance

我有一个大型SQL Server数据库,包含大约40列和数亿行。

这个表在模式中应该是松散的,因此我有很多列作为VARCHAR(MAX),即使它可能是BIGINT,DATETIME,INT等。这对查询时间/效率有影响吗?例如将

SELECT TOP 100 * FROM CustomerId = 34343

快于

SELECT TOP 100 * FROM CustomerId = '34343'

?如果是的话,快多少?

如果我使用VARCHAR(MAX)而不是固定长度VARCHAR怎么办? 那么像mySQL等其他数据库在这方面呢?

3 个答案:

答案 0 :(得分:3)

是的,比较字符串通常比比较纯数字要慢。它是否可测量取决于查询执行引擎如何进行比较。如果查询引擎没有与字符串的结尾相比 - 它通常不会,那么你的惩罚就不是很好。试试看吧。但从理论上讲,数字量的数字比较会更好。

答案 1 :(得分:2)

是的,使用INT与VARCHAR(MAX)进行比较肯定会带来性能上的好处。没有实际测量,真的很难说多少。

此外 - 没有理由不使用VARCHAR(MAX) - 但只有在需要时才有意义!

请参阅:

出于一些很好的理由,为什么你不应该只做一切VARCHAR(MAX) - 只是因为你可以....

答案 2 :(得分:1)

  

如果我改用VARCHAR(MAX)怎么办?   固定长度VARCHAR ..还有什么   关于其他数据库,如mySQL等   这方面呢?

  • PostgreSQL将VARCHAR(n)视为TEXT CHECK(LENGTH(Column) <= n)。指定最大长度没有性能优势。
  • SQLite完全忽略了VARCHAR列的长度限制。
  • 但是,MS SQL Server不允许在VARCHAR(MAX)列上创建索引,这会降低性能。