我想保存两位数字。存储数据的时间无关紧要。阅读至关重要。有很多行。
我可以用不同的方式做到这一点:
哪种解决方案效果最好? (内存,CPU)
答案是否取决于列上索引的索引/类型? 答案是否取决于该列中存储的行数?
答案 0 :(得分:3)
就存储而言,tinyint每个条目使用1个字节,numeric(2,0)每个条目使用5个字节,char(2)使用2个字节。约束对存储没有影响。
就CPU /速度而言,它几乎取决于你对结果所做的事情 - 比如连接,过滤或排序 - 以及sql-server优化器认为它必须做的转换。 / p>
然而,使用java JDBC对10百万条记录进行实验表明,读取char(2)比读取tinyint需要多1.5倍的时间,读取数字(2,0)需要两倍于读取tinyint的时间。
约束对写作有明显的影响,但对阅读的影响很小,除非像@DanGuzman [WHERE col = 100]或@ Christian4143 [Hudge Volume]提到的非常特殊的情况。
答案 1 :(得分:2)
使用"类型为tinyint的列,其约束为"< 100&#34 ;. Tinyint在sql中使用1个字节的存储空间。即使在较小的存储列上创建的索引也更快,因为相同的sql页面上的行数更少。
为了获得更好的性能,您的聚簇索引应该是最佳的,并且使用窄索引更好。是的,数据的大小也很重要,但是良好的索引和在sql中选择较少的列数,在WHERE子句中有序使用列可以克服其中的大部分。
https://www.red-gate.com/simple-talk/sql/performance/index-selection-and-the-query-optimizer