佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2307|回复: 2

SQL query

[复制链接]
发表于 30-7-2015 02:13 PM | 显示全部楼层 |阅读模式
本帖最后由 kucci 于 30-7-2015 02:16 PM 编辑
USE databaseA
GO

UPDATE tableX
SET   [a] = [a]*4
WHERE [time] < Cast('2015-07-10' as datetime) AND
          [a]*4 <= 48

UPDATE tableX
SET    [e]= [e] *4
WHERE  [time] < Cast('2015-07-10' as datetime) AND
           [e]*4 <= 24

UPDATE tableX
SET    [c] = [c]*4
WHERE  [time] < Cast('2015-07-10' as datetime) AND
       [c]*4 <= 48

UPDATE tableX
SET    [d] = [d]*4
WHERE  [time] <  Cast('2015-07-10' as datetime) AND
       [d]*4 <= 24
GO


虽然这个 script 没有问题,请问可以优化更好吗?

回复

使用道具 举报


ADVERTISEMENT

发表于 30-7-2015 05:01 PM | 显示全部楼层
回复

使用道具 举报

发表于 31-7-2015 10:10 AM | 显示全部楼层
早上好,

简单的Update Statement 基本上没办法做所谓的 query optimization,
除非你有用到 In / Join 等

在你的Case, 优化比较外部的东西,

例如:

  1. UPDATE tableX
  2. SET   [a] = [a]*4
  3. WHERE [time] < Cast('2015-07-10' as datetime) AND
  4.           [a]*4 <= 48
复制代码


你会用到 time 跟 a 这两个field 作为update 条件,
你可以尝试将 time 跟 a这两个field 设定 b-tree index
这样如果你的资料多, 你的update 依然会快

另外如果你的资料很多(以几milion 这样算)
为你的update statement 加入确切的时间会缩小需要update 的笔数, 进而改进速度
例如:

  1. UPDATE tableX
  2. SET   [a] = [a]*4
  3. WHERE [time] < Cast('2015-07-10' as datetime) AND
  4.           [time] > Cast('2015-07-01' as datetime) AND
  5.           [a]*4 <= 48
复制代码


目前我想到的只有这样.

共勉之.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 29-3-2024 03:53 AM , Processed in 0.058840 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表