急急急!!! 帮忙优化下代码!

j27849587 2010-09-27 05:57:36

/*
#############################################################
#  创建唯一标识数据表
#############################################################
*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Admin_Guid]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[Admin_Guid]
/* -- 写入表格式 -- */
CREATE TABLE [dbo].[Admin_Guid]
(
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Ip] [nvarchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
) ON [PRIMARY]
/*
#############################################################
#  创建推广统计数据表
#############################################################
*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Admin_Dvip]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[Admin_Dvip]
/* -- 写入表格式 -- */
CREATE TABLE [dbo].[Admin_Dvip]
(
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Admi] [nvarchar] (16) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Quan] [int] NOT NULL ,
[Qime] [datetime] NOT NULL
) ON [PRIMARY]




<!--#include file="Conn.Asp"-->
<%
'#############################################################
'#  SQL防注入
'#############################################################
Function NoSql(FS_inputStr)
Dim f_NoSqlHack_AllStr,f_NoSqlHack_Str,f_NoSqlHack_i,Str_InputStr
Str_InputStr = FS_inputStr
f_NoSqlHack_AllStr ="'|;|(|)|dbcc|alter|drop|*|and|exec|insert|or|select|delete|update|count|%|chr|mid|char|master|truncate|declare|set|where|xp_cmdshell|tab"
f_NoSqlHack_Str = Split(f_NoSqlHack_AllStr,"|")
For f_NoSqlHack_i=LBound(f_NoSqlHack_Str) To Ubound(f_NoSqlHack_Str)
If Instr(LCase(Str_InputStr),f_NoSqlHack_Str(f_NoSqlHack_i)) <> 0 Then
If f_NoSqlHack_Str(f_NoSqlHack_i) = "'" Then f_NoSqlHack_Str(f_NoSqlHack_i) = " \' "
Call ConnClose()
Response.End
End If
Next
NoSql = Replace(Replace(Str_InputStr,"'","''"),"%27","''")
End Function
'#############################################################
'#  关闭数据库对象
'#############################################################
Function ConnClose()
CN.Close
Set CN = Nothing
End Function
'#############################################################
'#
'#############################################################
Function CheckCF(Str_Sql)
CheckCF = Cn.ExeCute(Str_Sql)(0)
End Function
'#############################################################
'#  写入推广分析
'#############################################################
Function WriteDvip(Str_Dvip,Str_Guid,Str_Date)
Select Case IsSqlDataBase
Case 0 'Access数据库
Str_Sql = "Select Count(*) From Admin_Guid Where Ip='" & Str_Guid & "'"
Case 1 'MSSQL数据库
Str_Sql = "Select Count(*) From Admin_Guid Where Ip='" & Str_Guid & "'"
End Select
If CheckCF(Str_Sql) = 0 Then '判断 Admin_Guid 表中 Ip 字段有无 Str_Guid 数据!
Cn.ExeCute "Insert Into Admin_Guid(Ip) Values('" & Str_Guid &"')" '写入 Admin_Guid 表 Ip 字段!
Select Case IsSqlDataBase
Case 0 'Access数据库
Str_Sql = "Select Count(*) From Admin_Dvip Where Admi='" & Str_Dvip & "' And Qime=#" & Str_Date & "#"
Case 1 'MSSQL数据库
Str_Sql = "Select Count(*) From Admin_Dvip Where Admi='" & Str_Dvip & "' And Qime='" & Str_Date & "'"
End Select
If CheckCF(Str_Sql) = 0 Then '判断 Admin_Dvip 表中有无 Admi 和 Qime 条件的数据,没有就创建一条!
Cn.ExeCute "Insert Into Admin_Dvip(Admi,Quan,Qime) Values('" & Str_Dvip & "',1,'" & Str_Date & "')"
Else 'Admin_Dvip 表中有 Admi 和 Qime 条件的数据 , 就 Quan 字段 加1
Select Case IsSqlDataBase
Case 0 'Access数据库
Cn.ExeCute "Update Admin_Dvip Set Quan=Quan+1 Where Qime=#" & Str_Date & "# And Admi='" & Str_Dvip & "'"
Case 1 'MSSQL数据库
Cn.ExeCute "Update Admin_Dvip Set Quan=Quan+1 Where Qime='" & Str_Date & "' And Admi='" & Str_Dvip & "'"
End Select
End If
End If
End Function
'#############################################################
'#  参数获取
'#############################################################
Dim Str_Dvip,Str_Guid,Str_Date
'----------------------------------------------------------------------------------------------------------------------------
Str_Dvip = NoSql(Trim(Request.Form("Dvip"))) '推广帐号
Str_Guid = NoSql(Trim(Request.Form("Guid"))) '唯一标识
Str_Date = NoSql(Date()) '提交日期
'----------------------------------------------------------------------------------------------------------------------------
If Str_Dvip = "" Or Str_Guid = "" Or Len(Str_Guid) <> 32 Or Str_Date = "" Then
Call ConnClose()
Response.End()
End If
'#############################################################
'#  写入推广分析
'#############################################################
Call WriteDvip(Str_Dvip,Str_Guid,Str_Date)
Call ConnClose()
Response.End()
%>





我想优化下这个代码!!! Admin_Guid 这个表数据很大,大概在10-30W条数据.
...全文
100 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-09-27
  • 打赏
  • 举报
回复
兄弟,如果解决了就结贴哦,谢谢。
「已注销」 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 j27849587 的回复:]
我想是这个做!看大哥有什么办法帮我解决!

VB code

'#############################################################
'#  写入推广分析
'#############################################################
Function WriteDvip……
[/Quote]
已经加上了啊,index scan就可以了
j27849587 2010-09-27
  • 打赏
  • 举报
回复


我想是这个做!看大哥有什么办法帮我解决!


'#############################################################
'#  写入推广分析
'#############################################################
Function WriteDvip(Str_Dvip,Str_Guid,Str_Date)
Select Case IsSqlDataBase
Case 0 'Access数据库
Str_Sql = "Select Count(*) From Admin_Guid Where Ip='" & Str_Guid & "'"
Case 1 'MSSQL数据库
Str_Sql = "Select Count(*) From Admin_Guid Where Ip='" & Str_Guid & "'"
End Select
If CheckCF(Str_Sql) = 0 Then
Select Case IsSqlDataBase
Case 0 'Access数据库
Cn.ExeCute "Insert Into Admin_Guid(Ip) Values('" & Str_Guid &"')"
'在里加一句SQL,能够代替下面的其它判断!但是效率和效果都一样!
Case 1 'MSSQL数据库
Cn.ExeCute "Insert Into Admin_Guid(Ip) Values('" & Str_Guid &"')"
'在里加一句SQL,能够代替下面的其它判断!但是效率和效果都一样!
End Select
End If
End Function


「已注销」 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 j27849587 的回复:]

哈哈,这个我不会了,我也我才学SQL,呵呵,可以帮我解决下吗?给个最快的逻辑吗?谢谢啦!
[/Quote]
sample:
CREATE NONCLUSTERED INDEX IX_TEST_TNAME --创建一个非聚集索引,这个是index名字
ON TEST(TNAME) --为TEST表的TNAME字段创建索引
j27849587 2010-09-27
  • 打赏
  • 举报
回复
哈哈,这个我不会了,我也我才学SQL,呵呵,可以帮我解决下吗?给个最快的逻辑吗?谢谢啦!
「已注销」 2010-09-27
  • 打赏
  • 举报
回复
先给table scan涉及到的栏位加上index
j27849587 2010-09-27
  • 打赏
  • 举报
回复
Select Count(*) From Admin_Guid Where Ip='537F2FB2F3D740DA97EE77D2E6A51417'
Insert Into Admin_Guid(Ip) Values('537F2FB2F3D740DA97EE77D2E6A51417')
Select Count(*) From Admin_Dvip Where Admi='Admin' And Qime='2010-10-1'
Insert Into Admin_Dvip(Admi,Quan,Qime) Values('Admin',1,'2010-10-1')
Update Admin_Dvip Set Quan=Quan+1 Where Qime='2010-10-1' And Admi='Admin'
j27849587 2010-09-27
  • 打赏
  • 举报
回复
j27849587 2010-09-27
  • 打赏
  • 举报
回复
zsh0809 我想问问!

这几句SQL可以少2句不?

或者在逻辑那里优化下!
「已注销」 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 j27849587 的回复:]

zsh0809 我就是想优化里面那几句SQL.
看有什么办法可以到达效率最快.!

Select Count(*) From Admin_Guid Where Ip='" & Str_Guid & "'"
Insert Into Admin_Guid(Ip) Values('" & Str_Guid &"')"
Select Count(*) From ……
[/Quote]
你的sql已经很简洁了,选中每句sql看看 ctrl +L看看执行计划,最多加上部分index,但不要滥加
j27849587 2010-09-27
  • 打赏
  • 举报
回复
可以帮我修改出来吗!
王向飞 2010-09-27
  • 打赏
  • 举报
回复
你这已经是最简便的方法了。
常用where条件的字段加上索引。
j27849587 2010-09-27
  • 打赏
  • 举报
回复
zsh0809 我就是想优化里面那几句SQL.
看有什么办法可以到达效率最快.!

Select Count(*) From Admin_Guid Where Ip='" & Str_Guid & "'"
Insert Into Admin_Guid(Ip) Values('" & Str_Guid &"')"
Select Count(*) From Admin_Dvip Where Admi='" & Str_Dvip & "' And Qime='" & Str_Date & "'"
Update Admin_Dvip Set Quan=Quan+1 Where Qime='" & Str_Date & "' And Admi='" & Str_Dvip & "'"


或者把里面的判断逻辑改动,让效率最快!
「已注销」 2010-09-27
  • 打赏
  • 举报
回复
你想让看什么啊,这么一大段,还有逻辑部分,怎么帮你看?
「已注销」 2010-09-27
  • 打赏
  • 举报
回复
Admin_Guid 这个表数据很大,大概在10-30W条数据.
30W是小量的。

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧