首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在聚集索引中使用varchar字段。(性能测试)

在聚集索引中使用varchar字段。(性能测试)
EN

Database Administration用户
提问于 2022-08-31 09:42:31
回答 1查看 58关注 0票数 0

我正在使用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;

  • productsID.id聚类指数
  • salesID.productId非聚类索引

products16,sales16;

  • 产品16.产品代码聚集索引
  • 非聚集索引

products36,sales36;

  • 产品36.产品代码聚集索引
  • 非聚集索引

(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%的性能差异吗?

EN

回答 1

Database Administration用户

发布于 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表中。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/316271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档