У меня есть веб-приложение java, которое выбирает один столбец из таблицы (с 6 миллионами строк) и занимает много времени процессора. Этот select (SELECT id FROM mytable WHERE filename = 'unique_filename) занимает значительно меньше времени, когда выполняется в браузере запросов.Почему SQL-выбор занимает больше времени процессора в java?
Что может быть причиной этого?
Где я должен искать узкие места?
База данных MSSQL 2005 Standard
Java контейнер 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.
Когда вы говорите, процессорное время, вы имеете в виду процессор, используемый в Java приложения или процессора, используемого вашим сервером базы данных? Являются ли они на двух разных машинах? –
Tomcat и MSSQL находятся на одном сервере? В каких объектах ваше приложение Java хранит эти 6 миллионов идентификационных значений? Java, а также .NET требуется время для создания и уничтожения каждого объекта в памяти, и если вам нужно создать 6 миллионов объектов, это потребует значительного времени. –
Как это не вопрос? Конечно, это не очень подробно, но OP все еще может это исправить. – ChssPly76