สอบถามเกี่ยวกับการ Query SQL หน่อยครับคือมันช้ามากๆ
คือใน SQL Table Logs มันเยอะมากๆหลัก แสน Record query ใน Sql เองใช้เวลาประมาณ 30 กว่าวิ พอดึงจากหน้า เว็บหลัง Login เพื่อดู Logs นี่ รอนานจนหน้า Page ขาวไปเลย มีวิธีไหนช่วย จูน SQL Server ให้เร็วกว่านี้มั่งไหมครับ
Code ที่ใช้ดึง logs Access
Code (C#)
string commonCmd = String.Format("SELECT A.[id], A.[timestamp],A.[Computer_Name],A.[Packet_Type],B.[User_Name]," +
"A.[F_Q_User_Name],A.[Client_Friendly_Name],B.[Framed_IP_Address],B.[Calling_Station_Id] " +
"FROM [DBNAME].[dbo].[accounting_data] AS A, [DBNAME].[dbo].[accounting_data] AS B " +
"WHERE A.[id]=B.[id]+1 AND (A.[Packet_Type]=4 OR A.[Packet_Type]=3) " +
"AND (A.[timestamp] >= '{0}' AND A.[timestamp] <= '{1}')", startDate, endDate);
Tag : .NET, Ms SQL Server 2008, C#, VS 2010 (.NET 4.x)
Date :
2014-08-15 13:07:04
By :
offonepoint
View :
4010
Reply :
7
ขอ structure มาดูครับ ต้องการรู้ โครงสร้าง index เพื่อจะได้นำมาคิวรี่ ได้ครับ
หรือ ว่า table ไม่มี index ครับ
Date :
2014-08-15 14:00:06
By :
Chaidhanan
Code (C#)
using (SqlConnection connection = new SqlConnection("connection string"))
using (SqlCommand command = connection.CreateCommand())
{
DateTime start = DateTime.Now;
DateTime end = start.AddDays(10);
StringBuilder sb = new StringBuilder();
sb.AppendLine("SELECT A.[id],");
sb.AppendLine("A.[timestamp],");
sb.AppendLine("A.[Computer_Name],");
sb.AppendLine("A.[Packet_Type],");
sb.AppendLine("B.[User_Name],");
sb.AppendLine("A.[F_Q_User_Name],");
sb.AppendLine("A.[Client_Friendly_Name],");
sb.AppendLine("B.[Framed_IP_Address],");
sb.AppendLine("B.[Calling_Station_Id]");
sb.AppendLine("FROM [DBNAME].[dbo].[accounting_data] AS A");
sb.AppendLine("INNER JOIN [DBNAME].[dbo].[accounting_data] AS B ON (A.[id]=B.[id]+1)");
sb.AppendLine("WHERE A.[Packet_Type] IN (3, 4) AND A.[timestamp] BETWEEN @StartDate AND @EndDate;");
command.CommandType = CommandType.Text;
command.CommandText = sb.ToString();
command.Parameters.AddWithValue("@StartDate", startDate);
command.Parameters.AddWithValue("@EndDate", endDate);
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
{
while (reader.Read())
{
//do something...
}
}
}
Date :
2014-08-15 14:31:09
By :
ห้ามตอบเกินวันละ 2 กระทู้
Code (C#)
using (SqlConnection connection = new SqlConnection("connection string"))
using (SqlCommand command = connection.CreateCommand())
{
DateTime start = DateTime.Now;
DateTime end = start.AddDays(10);
StringBuilder sb = new StringBuilder();
sb.AppendLine("SELECT A.[id],");
sb.AppendLine("A.[timestamp],");
sb.AppendLine("A.[Computer_Name],");
sb.AppendLine("A.[Packet_Type],");
sb.AppendLine("B.[User_Name],");
sb.AppendLine("A.[F_Q_User_Name],");
sb.AppendLine("A.[Client_Friendly_Name],");
sb.AppendLine("B.[Framed_IP_Address],");
sb.AppendLine("B.[Calling_Station_Id]");
sb.AppendLine("FROM [DBNAME].[dbo].[accounting_data] AS A");
sb.AppendLine("INNER JOIN [DBNAME].[dbo].[accounting_data] AS B ON (A.[id]=B.[id]+1)");
sb.AppendLine("WHERE A.[Packet_Type] IN (3, 4) AND A.[timestamp] BETWEEN @StartDate AND @EndDate;");
command.CommandType = CommandType.Text;
command.CommandText = sb.ToString();
command.Parameters.AddWithValue("@StartDate", startDate);
command.Parameters.AddWithValue("@EndDate", endDate);
DataTable dt = new DataTable();
using (SqlDataAdapter adapter = new SqlDataAdapter())
{
adapter.SelectCommand = command;
adapter.Fill(dt);
}
}
Date :
2014-08-15 16:33:46
By :
ห้ามตอบเกินวันละ 2 กระทู้
คืออย่างงี้ครับหน้า Page หลัง Login แล้วมันจะขึ้น โชว์ logs ทั้งหมดก่อน แต่ทีนี้มัน ช้ามากจนหน้าขาวไปเลย
Date :
2014-08-18 11:14:30
By :
offonepoint
สร้าง index ให้ timestamp หน่อยดีกว่าไหมครับ จะได้ง่ายในการคิวรี่
ที่นี้การแสดงหน้า browser ก็คิวรี่มาแสดงเป็นบางส่วน
if( lasttime == '' ) where = '';
else where = "where timestamp>lasttime";
select top 1000 * from tbname & where
โครงสร้างแบบนี้นะครับ
ปล. ผมไม่คล่องกับ ASP
ถ้าเป็น php
$where = ($lasttime ? " where timestamp>'$lasttime' " : '');
$qr = "select top 100 [dbo].[tbname] " . $where;
$rs = mssql_query( $qr );
while( $ro = mssql_fetch_assoc($rs)){
$lasttime = $ro['timestamp'];
}
<button type='button' onclick="location.href=\'?lasttime=<?php echo $lasttime; ?> ....
Date :
2014-08-18 11:49:22
By :
Chaidhanan
Load balance : Server 05