UsefulSQL
FindObject:
---在当前Server上找某某object,注意只需修改"要找的object"就可以使用
EXEC sp_MSforeachdb 'use ? ;
IF EXISTS(SELECT top 1 1 FROM sys.syscomments WHERE text LIKE ''%要找的object%'')
SELECT ''?'' as dbname,object_name(id) as object FROM sys.syscomments
WHERE text LIKE ''%要找的object%'''
XML处理:
INSERT INTO IMK.[dbo].[ClaimAttachment]
				   ([ClaimNumber]
				   ,[AttachmentName]
				   ,[Path]
				   ,[Status]
				   ,[InDate]
				   ,[InUser]
				   ,[CompanyCode]
				   ,[LanguageCode])
					SELECT    
					@ClaimNumber    
					,T.c.value('(AttachmentName/text())[1]', 'nvarchar(300)') AS AttachmentName    
					,T.c.value('(Path/text())[1]', 'nvarchar(50)') AS [Path]    
					,T.c.value('(Status/text())[1]', 'char(1)') AS [Status]    -- 'O' AS Status
					,GETDATE() AS [InDate]
					,@IssueUser 
					,@CompanyCode 
					,@LanguageCode  
					FROM    
					@AttachmentList.nodes('/ArrayOfClaimAttachmentEntity/ClaimAttachmentEntity') T (c)
XML简单序列化:
XmlSerializer ser = new XmlSerializer(typeof(CreateTaskListRequest));
                StringBuilder xml = new StringBuilder();
                TextWriter stream = new StringWriter(xml);
                ser.Serialize(stream, requestList.CreateTaskByTemplateIDRequests[0]);
                string s = xml.ToString();
SQL Training:
1、建议将:
insert into log_SOInvoice (sonumber, wh ,invoicenumber)   
 select top 5000 sonumber,'50' , 1000 from newsql.newegg.dbo.changeorderloghistory  
 where sonumber in ( select sonumber from act..newegg_invoicemaster(nolock))  
 and changeordertime> getdate() - 30    
 and sonumber not in ( select sonumber from log_SOInvoice (nolock) where wh = '50')
CPU time = 484 ms,  elapsed time = 2230 ms.
修改为:
insert into log_SOInvoice (sonumber, wh ,invoicenumber)   
 select top 5000 sonumber,'50' , 1000 from newsql.newegg.dbo.changeorderloghistory  
 where changeordertime> getdate() - 30    
 and sonumber not in ( select sonumber from log_SOInvoice (nolock) where wh = '50')  
 and sonumber in ( select sonumber from act..newegg_invoicemaster(nolock))
2、select ReferenceSoNumber,ItemNumber,SerialNumber,ScanDate,ScanUser,LargeItemFlag,WarehouseNumber,
ShippingUser,ShippingDate,TransactionNumber 
from DropShipSerialNumber07  
where shippingDate>'12/18/2003' 
and transactionnumber not in (select transactionnumber from warehouse4..UploadSerialnumberLog07    
				where datediff(day,indate,getdate())<8)  
				and datediff(day,shippingdate,getdate())<7  
执行结果:CPU time = 21437 ms,  elapsed time = 33927 ms.
修改为:
select ReferenceSoNumber,ItemNumber,SerialNumber,ScanDate,ScanUser,LargeItemFlag,WarehouseNumber,
ShippingUser,ShippingDate,TransactionNumber 
from DropShipSerialNumber07 (nolock index(ShippingDate)) 
where shippingdate>dateadd(day,-7,getdate()) 
--shippingDate>'12/18/2003' 
and transactionnumber not in (select transactionnumber from warehouse4..UploadSerialnumberLog07(nolock)    
				where indate>dateadd(day,-8,getdate()))
执行结果: CPU time = 875 ms,  elapsed time = 2005 ms.
3.建议将:
 insert into log_SOInvoice (sonumber, wh ,invoicenumber) 
 select top 5000 a.sonumber,a.warehousenumber ,b.invoicenumber from newegg_sotransaction a(nolock)  
 inner join newegg_somaster b  (nolock) on a.sonumber = b.sonumber    
 where b.status <> 'v'  and a.warehousenumber is not null  
 and b.invoicenumber is not null and b.invoicenumber <> 0   
 and a.sonumber not in ( select sonumber from log_SOInvoice (nolock))   
 and warehousenumber > '' and warehousenumber is not null and  warehousenumber <>'00' and warehousenumber  <'90'  
 group by a.sonumber,a.warehousenumber,b.invoicenumber
CPU time = 18594 ms,  elapsed time = 6215 ms.
修改为:
 insert into log_SOInvoice (sonumber, wh ,invoicenumber) 
 select top 5000 a.sonumber,a.warehousenumber ,b.invoicenumber from newegg_sotransaction a(nolock)  
 inner join newegg_somaster b  (nolock) on a.sonumber = b.sonumber    
 where not exists( select sonumber from log_SOInvoice (nolock) where a.sonumber = sonumber ) 
 and b.status <> 'v'  and a.warehousenumber is not null  
 and b.invoicenumber is not null and b.invoicenumber <> 0   
 and warehousenumber > '' and warehousenumber is not null and  warehousenumber <>'00' and warehousenumber  <'90'  
 group by a.sonumber,a.warehousenumber,b.invoicenumber
4.建议将:
 update GCI set GCI.LeftAmount = GCI.LeftAmount + GD.SOAmount    
                  From GiftCertificateItem GCI ,giftredeem GD     
                  Where GCI.giftcode = GD.RedeemGiftCode     
                        And GD.SONumber = @SONumber     
                        And GD.Status ='O'  
update GCI set GCI.status = Case when GCI.giftunitprice < GCI.leftamount Then 'A' Else 'U' End
From GiftCertificateItem GCI ,giftredeem GD     
                  Where GCI.giftcode = GD.RedeemGiftCode     
                        And GD.SONumber = @SONumber     
                        And GD.Status ='O'    
合并为:
update GCI set GCI.LeftAmount = GCI.LeftAmount + GD.SOAmount,
	       GCI.status = Case when GCI.giftunitprice < GCI.leftamount Then 'A' Else 'U' End     
From GiftCertificateItem GCI ,giftredeem GD     
                  Where GCI.giftcode = GD.RedeemGiftCode     
                        And GD.SONumber = @SONumber     
                        And GD.Status ='O'
5.建议将SQL语句修改为UNION ALL连接;
SELECT distinct a.ItemNumber,
       b.itemcatalog,
       ISNULL(c.ComboID,
              0) AS ComboID,
       c.ItemNumber AS ComboItem,
       ISNULL(c.ItemCatalog,
              0) AS comboItemCatalog
FROM   ECommerce2005.dbo.IM_ItemBuyAlong a (nolock)
       INNER JOIN abs.dbo.Arinvt01 b (nolock)
         ON a.ItemNumber = b.Item
       LEFT JOIN ECOMMERCE2005.DBO.IM_ComboTransaction c (NOLOCK)
         ON ((c.ItemNumber = a.itemNumber
              OR c.ItemCatalog = b.Itemcatalog)
             AND c.ComboGroupid <> a.comboGroupid)
            OR c.combogroupid IN (SELECT combogroupid
                                  FROM   ECOMMERCE2005.DBO.IM_ComboGiftItem(NOLOCK)
                                  WHERE  itemNumber = a.itemNumber
                                       AND comboGroupid <> a.comboGroupid)
修改为:
SELECT a.ItemNumber,
       b.itemcatalog,
       ISNULL(c.ComboID,
              0) AS ComboID,
       c.ItemNumber AS ComboItem,
       ISNULL(c.ItemCatalog,
              0) AS comboItemCatalog
FROM   ECommerce2005.dbo.IM_ItemBuyAlong a (nolock)
       INNER JOIN abs.dbo.Arinvt01 b (nolock)
         ON a.ItemNumber = b.Item
       LEFT JOIN ECOMMERCE2005.DBO.IM_ComboTransaction c (NOLOCK)
         ON ((c.ItemNumber = a.itemNumber
              OR c.ItemCatalog = b.Itemcatalog)
             AND c.ComboGroupid <> a.comboGroupid)
union
SELECT a.ItemNumber,
       b.itemcatalog,
       ISNULL(c.ComboID,
              0) AS ComboID,
       c.ItemNumber AS ComboItem,
       ISNULL(c.ItemCatalog,
              0) AS comboItemCatalog
FROM   ECommerce2005.dbo.IM_ItemBuyAlong a (nolock)
       INNER JOIN abs.dbo.Arinvt01 b (nolock)
         ON a.ItemNumber = b.Item
       LEFT JOIN ECOMMERCE2005.DBO.IM_ComboTransaction c (NOLOCK)
         ON c.combogroupid IN (SELECT combogroupid
                                  FROM   ECOMMERCE2005.DBO.IM_ComboGiftItem(NOLOCK)
                                  WHERE  itemNumber = a.itemNumber
                                         AND comboGroupid <> a.comboGroupid)
原SQL语句执行结果: CPU time = 11187 ms,  elapsed time = 11264 ms.
修改为UNION ALL后执行结果:CPU time = 3486 ms,  elapsed time = 2412 ms.
6.建议将SQL语句:
select * from scm..potran01 (nolock) where purno = 912926 order by TransactionNumber
修改为:
select * from scm..potran01 (nolock) where purno = '912926'
order by TransactionNumber
结果:修改前:CPU time = 1109 ms,  elapsed time = 5319 ms.
      修改后:CPU time = 0 ms,  elapsed time = 40 ms.
7.可以考虑将SQL语句:
Select * From CodeCenter..ViewPropertiesInAdvSearch 
Where CatalogID=22 
Order By Priority,ValuePriority,ValueDescription
修改为:
Select * From CodeCenter..ViewPropertiesInAdvSearch 
Where CatalogID=22 
Order By Priority,ValuePriority,ValueDescription
option(maxdop 1)
结果:修改前:CPU time = 3284 ms,  elapsed time = 14832 ms.
      修改后:CPU time = 766 ms,  elapsed time = 1183 ms.
8.建议将SQL语句:
SELECT ACount = (SELECT COUNT(*)
                 FROM   ABS.dbo.arinvt01 a (nolock)
                        INNER JOIN codecenter..itemdescription b (nolock)
                          ON a.item = b.itemnumber
                 WHERE  NEWEGGITEMMARK > 0
                        AND checked = 1),
       VCount = (SELECT COUNT(*)
                 FROM   ABS.dbo.arinvt01 a (nolock)
                        INNER JOIN codecenter..itemdescription b (nolock)
                          ON a.item = b.itemnumber
                 WHERE  NEWEGGITEMMARK > 0
                        AND (ITEM LIKE '%sf'
                             OR ITEMCATALOG = 346
                             OR ITEM LIKE '50-%')
                        AND checked = 1),
       InStock = (SELECT COUNT(*)
                  FROM   ABS.dbo.arinvt01 A (nolock)
                         INNER JOIN inventory..ItemInventory B (NOLOCK)
                           ON A.ITEM = B.Item
                         INNER JOIN codecenter..itemdescription c (nolock)
                           ON a.item = c.itemnumber
                  WHERE  A.NEWEGGITEMMARK > 0
                         AND B.newegg_avail > 0
                         AND A.ITEM NOT LIKE '%sf'
                         AND A.ITEMCATALOG <> 346
                         AND A.ITEM NOT LIKE '50-%'
                         AND checked = 1),
       VirtualInStock = (SELECT COUNT(*)
                         FROM   ABS.dbo.arinvt01 A (nolock)
                                INNER JOIN inventory..ItemInventory B (NOLOCK)
                                  ON A.ITEM = B.Item
                                INNER JOIN codecenter..itemdescription c (nolock)
                                  ON A.item = c.itemnumber
                         WHERE  A.NEWEGGITEMMARK > 0
                                AND B.newegg_avail > 0
                                AND (A.ITEMCATALOG = 346
                                     OR A.ITEM LIKE '%SF'
                                     OR A.ITEM LIKE '50-%')
                                AND checked = 1),
       Refurbish = (SELECT COUNT(*)
                    FROM   ABS.dbo.arinvt01 A (nolock)
                           INNER JOIN inventory..ItemInventory B (NOLOCK)
                             ON A.ITEM = B.Item
                           INNER JOIN codecenter..itemdescription c (nolock)
                             ON a.item = c.itemnumber
                    WHERE  A.NEWEGGITEMMARK > 0
                           AND B.newegg_avail > 0
                           AND A.ITEM LIKE '%R'
                           AND checked = 1)
修改为:
SELECT ACount = SUM(ACount),
       VCount = SUM(VCount),
       InStock = SUM(InStock),
       VirtualInStock = SUM(VirtualInStock),
       Refurbish = SUM(Refurbish)
FROM   (SELECT ACount = COUNT(*),
              VCount = COUNT(CASE 
                             WHEN (ITEM LIKE '%sf'
                                   OR ITEMCATALOG = 346
                                   OR ITEM LIKE '50-%') THEN 1
                             END),
              InStock = 0,
              VirtualInStock = 0,
              Refurbish = 0
       FROM   ABS.dbo.arinvt01 a (nolock)
              INNER JOIN codecenter..itemdescription b (nolock)
                ON a.item = b.itemnumber
       WHERE  NEWEGGITEMMARK > 0
              AND checked = 1
       UNION ALL
       SELECT ACount = 0,
              VCount = 0,
              InStock = COUNT(CASE 
                              WHEN (A.ITEM NOT LIKE '%sf'
                                    AND A.ITEMCATALOG <> 346
                                    AND A.ITEM NOT LIKE '50-%') THEN 1
                              END),
              VirtualInStock = COUNT(CASE 
                                     WHEN (A.ITEMCATALOG = 346
                                           OR A.ITEM LIKE '%SF'
                                           OR A.ITEM LIKE '50-%') THEN 1
                                     END),
              Refurbish = COUNT(CASE 
                                WHEN A.ITEM LIKE '%R' THEN 1
                                END)
       FROM   ABS.dbo.arinvt01 A (nolock)
              INNER JOIN inventory..ItemInventory B (NOLOCK)
                ON A.ITEM = B.Item
              INNER JOIN codecenter..itemdescription c (nolock)
                ON A.item = c.itemnumber
       WHERE  A.NEWEGGITEMMARK > 0
              AND B.newegg_avail > 0
              AND checked = 1) A
结果:修改前:CPU time = 13375 ms,  elapsed time = 9772 ms.
      修改后:CPU time = 8916 ms,  elapsed time = 4776 ms.
9.建议将SQL语句:
SELECT SoNumber
FROM   [CNSLS].[dbo].[SOMaster](NOLOCK)
WHERE  CompanyCode = 1006
       AND Status = 'O'
       AND CreditCardVerifyMark = 'G'
       AND status <> 'V'
       AND (InvoiceNumber IS NULL 
            OR InvoiceNumber = 0)
       AND AcctPostDate IS NOT NULL 
       AND SoNumber NOT IN (SELECT SoNumber
                            FROM   [CNSLS].[dbo].[DownloadSO](NOLOCK))
修改为:
SELECT SoNumber
FROM   [CNSLS].[dbo].[SOMaster] a(NOLOCK)
WHERE  CompanyCode = 1006
       AND Status = 'O'
       AND CreditCardVerifyMark = 'G'
    --   AND status <> 'V'
       AND (InvoiceNumber IS NULL 
            OR InvoiceNumber = 0)
       AND AcctPostDate IS NOT NULL 
       AND not exists (SELECT SoNumber
                            FROM   [CNSLS].[dbo].[DownloadSO](NOLOCK) where SoNumber=a.SoNumber)
option (maxdop 1)
结果:修改前:CPU time = 3200 ms,  elapsed time = 4496 ms.
      修改后:CPU time = 1297 ms,  elapsed time = 1382 ms.
10.由于abs..PO_Detail_Query中的potran01表中的ITEM字段的值长度最大为10,因此建议将:
SELECT TOP 200 *
FROM   abs..PO_Detail_Query
WHERE  Item LIKE '[0-9]%'
       AND Item LIKE '%19-103-759%'
       AND purdate >= '10/16/2006 7:21:39 AM'
       AND purdate <= '1/17/2007 7:21:39 AM'
修改为:
SELECT TOP 200 *
FROM   abs..PO_Detail_Query
WHERE  Item = '19-103-759'
       AND purdate >= '10/16/2006 7:21:39 AM'
       AND purdate <= '1/17/2007 7:21:39 AM'
结果:修改前:CPU time = 6047 ms,  elapsed time = 10633 ms.
      修改后:CPU time = 0 ms,  elapsed time = 5 ms.
2、Personal表后未加NOLOCK;
11.建议将SQL语句:
SELECT Item = rtrim(b.ItemNumber) + 'R', 
       RefurbishIn = SUM(b.Quantity),  
       RefurbishOut = 0,
	RefurbishAdjust = 0  
       FROM [abs].dbo.RefurbishMaster AS a (NOLOCK)  
       INNER JOIN [abs].dbo.RefurbishTransaction AS b (NOLOCK)  
       ON a.RTNumber = b.RTNumber  
       WHERE a.ReceivingDate >= @pThisMonthBeginDate  
       AND a.ReceivingDate < @pOneDayAfterEffectDate  
       AND b.ItemNumber LIKE '%-%'  
       GROUP BY b.ItemNumber
UNION ALL  
       SELECT Item = b.ItemNumber,
	RefurbishIn = 0,  
       RefurbishOut = SUM(b.Quantity),  
       RefurbishAdjust = 0  
       FROM abs.dbo.RefurbishMaster AS a (nolock)  
       INNER JOIN [abs].dbo.RefurbishTransaction AS b (nolock)  
       ON a.RTNumber = b.RTNumber  
       WHERE a.ReceivingDate >= @pThisMonthBeginDate  
       AND a.ReceivingDate < @pOneDayAfterEffectDate  
       AND a.Source = '3'  
       AND b.ItemNumber LIKE '%-%'  
       GROUP BY b.ItemNumber
修改为:
SELECT Item =CASE WHEN a.Source = '3' THEN b.ItemNumber ELSE rtrim(b.ItemNumber) + 'R' END,  
       	      RefurbishIn = CASE WHEN a.Source = '3' THEN 0 ELSE SUM(b.Quantity) END,  
      	      RefurbishOut = CASE WHEN a.Source = '3' THEN SUM(b.Quantity) ELSE 0 END,
 	      RefurbishAdjust = 0  
       FROM [abs].dbo.RefurbishMaster AS a (NOLOCK)  
       INNER JOIN [abs].dbo.RefurbishTransaction AS b (NOLOCK)  
       ON a.RTNumber = b.RTNumber  
       WHERE a.ReceivingDate >= '2007-01-01'--@pThisMonthBeginDate  
       AND a.ReceivingDate < '2007-01-18'--@pOneDayAfterEffectDate  
       AND b.ItemNumber LIKE '%-%'  
       GROUP BY b.ItemNumber, a.Source
经查,调整后结果是一致的;
结果:调整前:CPU time = 846 ms,  elapsed time = 2161 ms.
      调整后:CPU time = 484 ms,  elapsed time = 901 ms.
12.由于使用sp_executesql函数时,字符型的参数变量是nchar或nvarchr的,但由于ZipCode,ShippingAddress是char型,因此查询时是不会使用索引的。因此建议将SQL:
exec sp_executesql N'       
SELECT * 
FROM imk.dbo.viewDetectFrud (nolock) 
WHERE ZipCode like rtrim(@ZipCode) + ''%'' 
and (ShippingAddress like rtrim(@FirstAddress) + ''%'' 
or ShippingAddress like rtrim(@SecondAddress) + ''%'')      ',
N'@ZIPCODE nvarchar(10),@FIRSTADDRESS nvarchar(80),@SECONDADDRESS nvarchar(80)', 
@ZIPCODE = N'97070', @FIRSTADDRESS = N'287', @SECONDADDRESS = N''
修改为:
declare @ZIPCODE varchar(10),@FIRSTADDRESS varchar(80),@SECONDADDRESS varchar(80)
set @ZIPCODE = '97070'
set @FIRSTADDRESS = '287'
set @SECONDADDRESS = ''
--exec sp_executesql N'  
exec (' 
SELECT * 
FROM imk.dbo.viewDetectFrud (nolock) 
WHERE ZipCode like ''' + @ZipCode + '%''
and (ShippingAddress like ''' + @FirstAddress + '%'' 
or ShippingAddress like '''+ @SecondAddress + '%'')')
结果:修改前:CPU time = 15781 ms,  elapsed time = 6395 ms.
      修改后:CPU time = 13 ms,  elapsed time = 13 ms.
UsefulSQL的更多相关文章
随机推荐
- 树莓派(Raspberry Pi)搭建简单的lamp服务
			
树莓派(Raspberry Pi)搭建简单的lamp服务: 1. LAMP 的安装 sudo apt-get install apache2 mysql-server mysql-client php ...
 - IIS7 Application Pool Integrate Mode 和 Classic Mode 的区别
			
IIS7也用了好久了,关于Application Pool Integrate Mode 和 Classic Mode 究竟是什么也是懵懵懂懂,于是下决心去官网看了技术文档,终于恍然大悟,特来分享一下 ...
 - 不写1行代码,在Mac上体验ASP.NET 5的最简单方法
			
昨天微软发布了ASP.NET 5 beta2(详见ASP.NET 5 Beta2 发布),对ASP.NET 5的好奇心又被激发了. 今天下午在Mac OS X上体验了一下ASP.NET 5,而且借助Y ...
 - 循序渐进做项目系列(1):最简单的C/S程序——让服务器来做加法
			
(本文是专门针对未接触过C/S开发的初学者而写的,C/S开发高手请自动忽略啊~~) 还在写“Hello world!”式的单机程序吗?还在各种拖控件吗?是否自己都觉得有点low呢?来个质的飞跃吧!看看 ...
 - javascript 设计模式-----外观模式
			
外观模式是为外部提供简单的接口一种方式,由于模块内部方法庞杂,不能一一对外公开,那么我们需要一个统一的和简单的对外方法(API)来调用这些内在的函数.这时候我们可以用到外观模式: var module ...
 - Linux 网络编程(epoll)
			
服务器端代码 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/soc ...
 - Java多线程1:进程与线程概述
			
进程和线程 谈到多线程,就得先讲进程和线程的概念. 进程 进程可以理解为受操作系统管理的基本运行单元.360浏览器是一个进程.WPS也是一个进程,正在操作系统中运行的".exe"都 ...
 - dijit样式定制之TextBox(一)
			
参考资料:http://dojotoolkit.org/reference-guide/1.9/dijit/themes.html http://archive.dojotoolkit.org/nig ...
 - 使用oracle的大数据工具ODCH访问HDFS数据文件
			
软件下载 Oracle Big Data Connectors:ODCH 下载地址: http://www.oracle.com/technetwork/bdc/big-data-connectors ...
 - 每天一个linux命令(59):rcp命令
			
rcp代表“remote file copy”(远程文件拷贝).该命令用于在计算机之间拷贝文件.rcp命令有两种格式.第一种格式用于文件到文件的拷贝:第二种格式用于把文件或目录拷贝到另一个目录中. 1 ...