GUID和自增ID的比较_delete

本文通过对比不同条件下的SQL删除操作,测试并记录了其执行效率。通过对一系列删除操作的时间消耗进行测量,包括范围删除和最后一条数据删除,并利用索引来优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.范围删除

 

 

 

------------------------------------------------------------------------------------------------

 

--清空缓存

DBCC FREEPROCCACHE  WITH NO_INFOMSGS

DBCC FREESESSIONCACHE WITH NO_INFOMSGS

DBCC FREESYSTEMCACHE('All') WITH NO_INFOMSGS

DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS

 

SET NOCOUNT on

 

DECLARE @费用ID int

SET @费用ID =4406668

 

 

 

CREATE TABLE #result

(

    状态  varchar(20),

    [test(毫秒)] INT,

    [test_id(毫秒)] INT,

    [test_guid(毫秒)] INT,

    [test_id_guid(毫秒)] INT,

    [test_id_guid1(毫秒)] INT

)

 

DECLARE @start INT

DECLARE @end   INT

SET @start=1

SET @end=10

 

WHILE (@start<=@end)

 

BEGIN      --循环开始

 

DBCC FREEPROCCACHE

DBCC FREESESSIONCACHE

DBCC FREESYSTEMCACHE('All')

DBCC DROPCLEANBUFFERS

 

     

declare @d datetime      

set @d = getdate()      

 

delete

FROM   test

WHERE 费用_ID  between @费用ID and @费用ID+100

     

declare @result int      

select  @result = datediff(ms, @d, getdate())       

    

 

 

 

 

declare @d1 datetime      

set @d1 = getdate()      

 

delete

FROM   test_ID

WHERE 费用_ID  between @费用ID and @费用ID+100

     

declare @result1 int      

select  @result1 = datediff(ms, @d1, getdate())       

 

declare @d2 datetime      

set @d2 = getdate()      

 

delete

FROM   test_guid

WHERE 费用_ID  between @费用ID and @费用ID+100

 

     

declare @result2 int      

select  @result2 = datediff(ms, @d2, getdate())       

 

declare @d3 datetime      

set @d3 = getdate()      

 

delete

FROM   test_id_guid

WHERE 费用_ID  between @费用ID and @费用ID+100

      

declare @result3 int      

select  @result3 = datediff(ms, @d3, getdate())       

 

declare @d4 datetime      

set @d4 = getdate()      

 

 

delete

FROM   test_id_guid1

WHERE 费用_ID  between @费用ID and @费用ID+100

     

declare @result4 int      

select  @result4 = datediff(ms, @d4, getdate())       

 

 

INSERT INTO #result

SELECT '正常',

       @result AS 'test(毫秒)',

       @result1 'test_id(毫秒)',

       @result2 'test_guid(毫秒)',

       @result3 'test_id_guid(毫秒)',

       @result4 'test_id_guid1(毫秒)'

 

SET @费用ID=@费用ID+100

SET @start=@start+1

 

END      --循环结束

        

 

 

 

SELECT *  FROM #result

UNION ALL

SELECT '最小值',

       min([test(毫秒)]),

       min([test_id(毫秒)]),

       min([test_guid(毫秒)]),

       min([test_id_guid(毫秒)]),

       min([test_id_guid1(毫秒)])

FROM #result

UNION  ALL

SELECT '平均值',

       AVG([test(毫秒)]),

       AVG([test_id(毫秒)]),

       AVG([test_guid(毫秒)]),

       AVG([test_id_guid(毫秒)]),

       AVG([test_id_guid1(毫秒)])

FROM #result

UNION ALL

SELECT '最大值',

       max([test(毫秒)]),

       max([test_id(毫秒)]),

       max([test_guid(毫秒)]),

       max([test_id_guid(毫秒)]),

       max([test_id_guid1(毫秒)])

FROM #result

 

--DROP TABLE #result

 ------------------------------------------------------------------------------------------------

 

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_guid(毫秒)]

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_id_guid(毫秒)]

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_id_guid1(毫秒)]

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_guid(毫秒)]

 

 

2.最后一条数据删除

 

------------------------------------------------------------------------------------------------

 

--清空缓存

DBCC FREEPROCCACHE  WITH NO_INFOMSGS

DBCC FREESESSIONCACHE WITH NO_INFOMSGS

DBCC FREESYSTEMCACHE('All') WITH NO_INFOMSGS

DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS

 

SET NOCOUNT on

 

DECLARE @费用ID int

SET @费用ID =4407669

 

 

 

CREATE TABLE #result

(

    状态  varchar(20),

    [test(毫秒)] INT,

    [test_id(毫秒)] INT,

    [test_guid(毫秒)] INT,

    [test_id_guid(毫秒)] INT,

    [test_id_guid1(毫秒)] INT

)

 

DECLARE @start INT

DECLARE @end   INT

SET @start=1

SET @end=20

 

WHILE (@start<=@end)

 

BEGIN      --循环开始

 

DBCC FREEPROCCACHE

DBCC FREESESSIONCACHE

DBCC FREESYSTEMCACHE('All')

DBCC DROPCLEANBUFFERS

 

     

declare @d datetime      

set @d = getdate()      

 

delete

FROM   test

WHERE 费用_ID= @费用ID

     

declare @result int      

select  @result = datediff(ms, @d, getdate())       

    

 

 

 

 

declare @d1 datetime      

set @d1 = getdate()      

 

delete

FROM   test_ID

WHERE 费用_ID= @费用ID

     

declare @result1 int      

select  @result1 = datediff(ms, @d1, getdate())       

 

declare @d2 datetime      

set @d2 = getdate()      

 

delete

FROM   test_guid

WHERE 费用_ID= @费用ID

 

 

     

declare @result2 int      

select  @result2 = datediff(ms, @d2, getdate())       

 

declare @d3 datetime      

set @d3 = getdate()      

 

delete

FROM   test_id_guid

WHERE 费用_ID= @费用ID

      

declare @result3 int      

select  @result3 = datediff(ms, @d3, getdate())       

 

declare @d4 datetime      

set @d4 = getdate()      

 

 

delete

FROM   test_id_guid1

WHERE 费用_ID= @费用ID

     

declare @result4 int      

select  @result4 = datediff(ms, @d4, getdate())       

 

 

INSERT INTO #result

SELECT '正常',

       @result AS 'test(毫秒)',

       @result1 'test_id(毫秒)',

       @result2 'test_guid(毫秒)',

       @result3 'test_id_guid(毫秒)',

       @result4 'test_id_guid1(毫秒)'

 

SET @费用ID=@费用ID+1

SET @start=@start+1

 

END      --循环结束

        

 

 

 

SELECT *  FROM #result

UNION ALL

SELECT '最小值',

       min([test(毫秒)]),

       min([test_id(毫秒)]),

       min([test_guid(毫秒)]),

       min([test_id_guid(毫秒)]),

       min([test_id_guid1(毫秒)])

FROM #result

UNION  ALL

SELECT '平均值',

       AVG([test(毫秒)]),

       AVG([test_id(毫秒)]),

       AVG([test_guid(毫秒)]),

       AVG([test_id_guid(毫秒)]),

       AVG([test_id_guid1(毫秒)])

FROM #result

UNION ALL

SELECT '最大值',

       max([test(毫秒)]),

       max([test_id(毫秒)]),

       max([test_guid(毫秒)]),

       max([test_id_guid(毫秒)]),

       max([test_id_guid1(毫秒)])

FROM #result

 

--DROP TABLE #result

 ------------------------------------------------------------------------------------------------

 

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_guid(毫秒)]

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_id_guid(毫秒)]

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_id_guid1(毫秒)]

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_guid(毫秒)]

 

 

 

 

--创建索引

CREATE   INDEX test1 ON test_id(id)

CREATE   INDEX test2 ON test_guid(guidid)

 

CREATE   INDEX test3 ON test_id_guid(id)

CREATE   INDEX test4 ON test_id_guid(guidid)

CREATE   INDEX test5 ON test_id_guid1(id)

CREATE   INDEX test6 ON test_id_guid1(guidid)

CREATE   INDEX test7 ON test_id_guid1(guidid1)

 

 

 

 

 

 

 

 

------------------------------------------------------------------------------------------------

 

 

 

--清空缓存

 

DBCC FREEPROCCACHE  WITH NO_INFOMSGS

 

DBCC FREESESSIONCACHE WITH NO_INFOMSGS

 

DBCC FREESYSTEMCACHE('All') WITH NO_INFOMSGS

 

DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS

 

 

 

SET NOCOUNT on

 

 

 

DECLARE @费用ID int

 

SET @费用ID =4406668

 

 

 

 

 

 

 

CREATE TABLE #result

 

(

 

    状态  varchar(20),

 

    [test(毫秒)] INT,

 

    [test_id(毫秒)] INT,

 

    [test_guid(毫秒)] INT,

 

    [test_id_guid(毫秒)] INT,

 

    [test_id_guid1(毫秒)] INT

 

)

 

 

 

DECLARE @start INT

 

DECLARE @end   INT

 

SET @start=1

 

SET @end=10

 

 

 

WHILE (@start<=@end)

 

 

 

BEGIN      --循环开始

 

 

 

DBCC FREEPROCCACHE

 

DBCC FREESESSIONCACHE

 

DBCC FREESYSTEMCACHE('All')

 

DBCC DROPCLEANBUFFERS

 

 

 

     

 

declare @d datetime      

 

set @d = getdate()      

 

 

 

delete

 

FROM   test

 

WHERE 费用_ID  between @费用ID and @费用ID+100

 

     

 

declare @result int      

 

select  @result = datediff(ms, @d, getdate())       

 

    

 

 

 

 

 

 

 

 

 

declare @d1 datetime      

 

set @d1 = getdate()      

 

 

 

delete

 

FROM   test_ID

 

WHERE 费用_ID  between @费用ID and @费用ID+100

 

     

 

declare @result1 int      

 

select  @result1 = datediff(ms, @d1, getdate())       

 

 

 

declare @d2 datetime      

 

set @d2 = getdate()      

 

 

 

delete

 

FROM   test_guid

 

WHERE 费用_ID  between @费用ID and @费用ID+100

 

 

 

     

 

declare @result2 int      

 

select  @result2 = datediff(ms, @d2, getdate())       

 

 

 

declare @d3 datetime      

 

set @d3 = getdate()      

 

 

 

delete

 

FROM   test_id_guid

 

WHERE 费用_ID  between @费用ID and @费用ID+100

 

      

 

declare @result3 int      

 

select  @result3 = datediff(ms, @d3, getdate())       

 

 

 

declare @d4 datetime      

 

set @d4 = getdate()      

 

 

 

 

 

delete

 

FROM   test_id_guid1

 

WHERE 费用_ID  between @费用ID and @费用ID+100

 

     

 

declare @result4 int      

 

select  @result4 = datediff(ms, @d4, getdate())       

 

 

 

 

 

INSERT INTO #result

 

SELECT '正常',

 

       @result AS 'test(毫秒)',

 

       @result1 'test_id(毫秒)',

 

       @result2 'test_guid(毫秒)',

 

       @result3 'test_id_guid(毫秒)',

 

       @result4 'test_id_guid1(毫秒)'

 

 

 

SET @费用ID=@费用ID+100

 

SET @start=@start+1

 

 

 

END      --循环结束

 

        

 

 

 

 

 

 

 

SELECT *  FROM #result

 

UNION ALL

 

SELECT '最小值',

 

       min([test(毫秒)]),

 

       min([test_id(毫秒)]),

 

       min([test_guid(毫秒)]),

 

       min([test_id_guid(毫秒)]),

 

       min([test_id_guid1(毫秒)])

 

FROM #result

 

UNION  ALL

 

SELECT '平均值',

 

       AVG([test(毫秒)]),

 

       AVG([test_id(毫秒)]),

 

       AVG([test_guid(毫秒)]),

 

       AVG([test_id_guid(毫秒)]),

 

       AVG([test_id_guid1(毫秒)])

 

FROM #result

 

UNION ALL

 

SELECT '最大值',

 

       max([test(毫秒)]),

 

       max([test_id(毫秒)]),

 

       max([test_guid(毫秒)]),

 

       max([test_id_guid(毫秒)]),

 

       max([test_id_guid1(毫秒)])

 

FROM #result

 

 

 

--DROP TABLE #result

 

 ------------------------------------------------------------------------------------------------

 

 

 

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_guid(毫秒)]

 

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_id_guid(毫秒)]

 

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_id_guid1(毫秒)]

 

 SELECT COUNT(*)  FROM #result  WHERE [test_id(毫秒)]>[test_guid(毫秒)]

 

 

 

 

 

 

 

 

 

 

 

 

帮我生成mysql的建表脚本逻辑实体 是否主键 属性 类型 默认值 说明 longi_cell_production_plan_adjustment_process pk id 主键 pk period_version 整数 分区键 order_code GUID 订单编码 order_item_code 项目编码 order_number 订单号 sales_order_code 销售订单号,MTO Segment 为哪个sales_order做的 sales_order_item MTO Segment c_business_opportunity_code 商机编号 c_contract_code 合同号 task_order_number 任务号 task_status 任务状态 c_produce_area 生产区域(双反区、非双反区) c_business_group 内部BG c_item_name 项目名称 c_country 国家 c_province 省份 c_departure_port 起运港 c_region_department 地区部(销售大区) c_sale_department 销售部(销售部门) material_code 物料编码 c_capacity_object_code 产能对象 c_standard_capacity_object 标准产能对象 c_standard_capacity_object_name 产能对象名称 c_power 功率 order_category 大类 订单类型 order_type 小类 订单类 c_yield_rate decimal 良率 c_hitting_rate decimal 命中率 c_node_list 可选基地列表(列表类,逗号分隔的node_code) order_item_status 订单状态 c_hitting_plan_id 电池投放方案id demand_quantity decimal 需求量 planned_quantity decimal 本期计划量 original_serial_number 整数 原始序号 pk serial_number 整数 序号 node_code 基地 c_workshop_code 车间 pk resource_code 线体 要求入库日期 original_capacity_requirement_start 日期 原始开始时间 capacity_requirement_start 日期 调整后开始时间 original_capacity_requirement_end 日期 原始结束时间 capacity_requirement_end 日期 调整后结束时间 original_capacity_requirement decimal 原始排产投入量 capacity_requirement decimal 调整后排产投入量 specify_start_date 日期 指定日期 available_quantity decimal 可排产量 operation_type 操作标识:1.新 2.修改 3.删除 exception_type 异常标识 data_status 数据状态 enum_delete NORMAL 逻辑删除(DELETED,NORMAL)
最新发布
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值