У меня есть веб-приложение Java, которое выбирает один столбец из таблицы (с 6 миллионами строк), и это занимает много процессорного времени Этот выбор (SELECT id FROM mytable WHERE filename = 'unique_filename') занимает значительно меньше времени при выполнении в браузере запросов.
Что может вызвать это?
С чего мне начать искать узкие места?
База данных MSSQL 2005 Standard
Контейнер Java - Tomcat 5.5 (с sqljdbc 1.2)
Подробнее:
1.Ява код
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]
Столбец имени файла уникален, поэтому набор результатов всегда равен 1 или нулю.