테이블에서 6 백만 행을 가진 하나의 열을 선택하고 많은 CPU 시간이 소요되는 Java 웹 응용 프로그램이 있습니다. 이 select (select id from FROM mytable WHERE filename = 'unique_filename')는 쿼리 브라우저에서 실행될 때 시간이 훨씬 적습니다.왜 SQL select가 java에서 더 많은 CPU 시간을 필요로합니까?
어떻게 될 수 있습니까?
어디에서 병목 현상을 찾아야합니까? 데이터베이스 개체를 연결 개체를받을 DriverManager를 사용
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
}
1.Java 코드 :
데이터베이스 자바 컨테이너 (sqljdbc 1.2) 톰캣 5.5
자세한 내용입니다 MSSQL 2005 표준
입니다 .
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 시간을 말할 때, 당신은 자바가 사용하는 CPU를 의미합니까 응용 프로그램 또는 데이터베이스 서버에서 사용하는 CPU? 그들은 두 개의 다른 기계에 있습니까? –
Tomcat과 MSSQL이 같은 서버에 있습니까? 어떤 객체에서 Java 응용 프로그램이 600 만 개의 ID 값을 저장합니까? .NET뿐만 아니라 Java도 메모리의 각 객체를 만들고 파괴 할 시간이 필요하며 6 백만 개의 객체를 만들어야하는 경우 많은 시간이 필요합니다. –
어떻게 이것이 진짜 질문이 아닌가요? 매우 자세한 것은 아니지만 영업 담당자는 여전히이를 수정할 수 있습니다. – ChssPly76