我正在使用2016。
为我的产品桌;
我需要用产品类型和产品代码的两个字段定义一个ClusteredIndex。ProductType(tinyint),ProductCode(varchar(32))。
我知道ProductId是正确的选择,但它会影响我的软件开发速度。
但就速度而言,我希望我的Product运行得很快。
估计表中将有1,000,000条记录。
我想问的是,如果在ProductCode中使用varchar(16)而不是varchar(32),它会在多大程度上影响查询的性能?
是否有一个软件,我可以测试为ProductCode varchar(32)和varchar(16)在1,000,000行?我可以在上这样做吗?
16个角色现在就足够了。但是,用户可能希望系统本身给出产品代码--在这种情况下,我希望使用newid自动设置产品代码。
产品Id(int)对我来说不是正确的解决方案。因为有自己的产品代码的许多事务(订单、仓库、销售)都是通过这个代码执行的。
编辑:我根据评论用SqQueryStress进行了测试。
我要分享结果。
我创建了两个表作为产品和销售。
productsID,salesID;
products16,sales16;
products36,sales36;
(https://www.db-fiddle.com/f/3qJM9uupQoXAtLgL7u8YaE/0)
我输入了10万种产品,随机结果
productsId 06:03 undefined
products16 05:46 undefined
products36 05:42
我从10,000个随机产品表中输入了销售记录。
salesID 01:42
sales16 02:34
sales36 02:01
我根据输入的数据列出销售报告。(千次)
这是否意味着报告1000 * 10,000 (销售项目) 10,000,000行?
salesId销售报告(加入) 01:07
sales16销售报告(加入) 02:05
sales36销售报告(加入) 02:55
我第一次使用SqlQueryStress,我对解释不太了解。
当我得到1000万的销售数据时。报告sales36和sales16以及02:55 (175秒) 02:05 (125秒)有40%的性能差异吗?
发布于 2022-08-31 12:50:33
我很难跟踪您的SQLQueryStress结果,但抛开这一点,我非常怀疑,对于1,000,000行的小数据集,VARCHAR(32)
和VARCHAR(16)
之间会有什么明显的差异。
如果希望对两者之间的差异进行粒度测试,只需在通过运行时间统计启用SET STATISTICS TIME ON;
之后,在SSMS中运行示例查询即可。每次运行查询时,CPU时间和运行时间将显示在Messages选项卡中。我会对您要比较的每个字段大小运行10次查询,然后平均每组测试所用的时间。您还应该在测试期间考虑报废结果,以最小化不相关的变量,如网络和呈现时间。
或者,如果您不想限制自己,您可以(而且可能应该从规范化的角度)创建一个单独的ProductCodes
表,该表存储不同的代码列表(具有任何合理大小的VARCHAR
描述字段),并以CodeId
字段作为主键,即INT
,然后将CodeId
字段存储在Products
表中。
https://dba.stackexchange.com/questions/316271
复制相似问题