我有一個java web應用程序,從表中選擇一列(600萬行),它需要大量的CPU時間。這個select(SELECT id FROM mytable WHERE filename ='unique_filename')在查詢瀏覽器中執行時花費的時間要少得多。爲什麼SQL select在java中佔用更多的CPU時間?
這是什麼原因造成的?
我應該從哪裏開始尋找瓶頸?
數據庫是MSSQL 2005標準
爪哇容器是Tomcat的5.5(與sqljdbc 1.2)
更多細節:
1.Java代碼
ResultSet rs = null;
PreparedStatement stmt = null;
Connection conn = null;
Integer myId=null;
String myVeryUniqueFileName = strFromSomeWhere;
try
{
conn = Database.getConnection();
stmt = conn.prepareStatement("SELECT id FROM mytable WHERE filename = ?");
stmt.setString(1, myVeryUniqueFileName);
rs = stmt.executeQuery();
if (rs.next())
{
myId= new Integer(rs.getInt(1));
} }
if (rs.next())
{
throw new DBException("Duplicate myId: " + myId);
}
return myId;
} catch (Exception e) {
// handle this
}
數據庫對象使用的DriverManager以接收連接對象。
2.SQL表格大約有30列。
CREATE TABLE [dbo].[calls](
[id] [int] NOT NULL,
...
[filename] [varchar](50) NOT NULL,
...
CONSTRAINT [PK_xxxxxxxxxxxx] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY],
CONSTRAINT [UQ_xxxxxxxxxxxx] UNIQUE NONCLUSTERED
(
[filename] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
文件列是唯一的,因此結果集是allways 1或null。
當你說的CPU時間,你的意思是在Java中使用的CPU應用程序還是數據庫服務器使用的CPU?他們在兩臺不同的機器上嗎? – 2009-08-06 14:39:29
Tomcat和MSSQL在同一臺服務器上?在你的Java應用程序中存儲了600萬個ID值的對象是什麼? Java和.NET都需要時間創建和銷燬內存中的每個對象,並且如果需要創建600萬個對象,則需要大量時間。 – 2009-08-06 14:40:55
這不是一個真正的問題?這不是很詳細,當然,但OP仍然可以解決這個問題。 – ChssPly76 2009-08-06 17:09:17