Помогите с производительностью запроса
От: arkhivania  
Дата: 23.03.10 14:03
Оценка:
Приветствую! Я не профи в БД программировании, но использую в своем приложении SQL Compact 3.5 и работаю с ним через
SqlCeDataAdapter, SqlCeConnection и т.д., не использую ни ентити фреймворк, ни linq2sql. У меня проблема с производительностью, дело в том, что один и тот же запрос в SQL Management Studio и в моей программе выполняется с координально разной скоростью. 2 секунды в моей программе против 0 секунд в мэнэджмент студии. Долго я гадал в чем дело, гуглил и чесал затылок целых пол часа и вот что понял, что ... если я делаю вот так

cmd.CommandText = "select top(50) [PatientName], COUNT(*) AS INSCOUNT FROM DicomItem where PatientName like @PN and PatientID like @PID GROUP BY [PatientName] order by PatientName";
                    cmd.Parameters.Add(new SqlCeParameter("@PN", SqlDbType.NVarChar));
                    cmd.Parameters.Add(new SqlCeParameter("@PID", SqlDbType.NVarChar));
                    cmd.Parameters["@PN"].Direction = ParameterDirection.Input;
                    cmd.Parameters["@PN"].IsNullable = false;
                    cmd.Parameters["@PN"].Size = (patientName + "%").Length;
                    cmd.Parameters["@PN"].Value = patientName + "%";


                    cmd.Parameters["@PID"].Direction = ParameterDirection.Input;
                    cmd.Parameters["@PID"].IsNullable = false;
                    cmd.Parameters["@PID"].Size = ("%" + patientID + "%").Length;
                    cmd.Parameters["@PID"].Value = "%" + patientID + "%";


то адаптер заполняет DataTable в течение 2 секунд, а если я вместо параметров конструирую запрос сам, то всё летает супер быстро за 0 секунд. Вопрос, как мне надо настроить все эти параметры чтобы всё было правильно и быстро, так как конструировать запрос сам я не хочу.

п.с. я использую пропатченный последними апдейтами компакт, так что вроде как он нормальный и относительно свежий.

Спасибо!
Re: Помогите с производительностью запроса
От: Аноним  
Дата: 23.03.10 14:55
Оценка:
Здравствуйте, arkhivania, Вы писали:

A>Приветствую! Я не профи в БД программировании, но использую в своем приложении SQL Compact 3.5 и работаю с ним через

....
A>то адаптер заполняет DataTable в течение 2 секунд, а если я вместо параметров конструирую запрос сам, то всё летает супер быстро за 0 секунд. Вопрос, как мне надо настроить все эти параметры чтобы всё было правильно и быстро, так как конструировать запрос сам я не хочу.

Попробуйте перед выполнением команды вызвать Prepare и посмотрите, не тратится ли львиная доля времени на него.
И оцените последующее время выполнения команды, конечно.
Re[2]: Помогите с производительностью запроса
От: arkhivania  
Дата: 23.03.10 15:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, arkhivania, Вы писали:


A>>Приветствую! Я не профи в БД программировании, но использую в своем приложении SQL Compact 3.5 и работаю с ним через

А>....
A>>то адаптер заполняет DataTable в течение 2 секунд, а если я вместо параметров конструирую запрос сам, то всё летает супер быстро за 0 секунд. Вопрос, как мне надо настроить все эти параметры чтобы всё было правильно и быстро, так как конструировать запрос сам я не хочу.

А>Попробуйте перед выполнением команды вызвать Prepare и посмотрите, не тратится ли львиная доля времени на него.

А>И оцените последующее время выполнения команды, конечно.

пробовал. Prepare проскакивает быстро, время примерно такое-же. Сам Fill адаптера долго проходит.
Re[3]: Помогите с производительностью запроса
От: Аноним  
Дата: 23.03.10 15:01
Оценка:
Здравствуйте, arkhivania, Вы писали:

A>пробовал. Prepare проскакивает быстро, время примерно такое-же. Сам Fill адаптера долго проходит.

А если в запрос option(recompile) добавить?
Re[4]: Помогите с производительностью запроса
От: arkhivania  
Дата: 23.03.10 15:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, arkhivania, Вы писали:


A>>пробовал. Prepare проскакивает быстро, время примерно такое-же. Сам Fill адаптера долго проходит.

А>А если в запрос option(recompile) добавить?

хм... не очень понял. а как это?
Re[5]: Помогите с производительностью запроса
От: Аноним  
Дата: 23.03.10 15:06
Оценка:
Здравствуйте, arkhivania, Вы писали:
А>>А если в запрос option(recompile) добавить?

A>хм... не очень понял. а как это?


SELECT [CaseLevel]
FROM [dbo].[CaseLevel]
option(recompile)
Re[6]: Помогите с производительностью запроса
От: arkhivania  
Дата: 23.03.10 15:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, arkhivania, Вы писали:

А>>>А если в запрос option(recompile) добавить?

A>>хм... не очень понял. а как это?


А>
А>SELECT [CaseLevel]
А>FROM [dbo].[CaseLevel]
А>option(recompile)
А>


не понравилось SQL Compact — у такая опция
Re[7]: Помогите с производительностью запроса
От: Аноним  
Дата: 23.03.10 15:24
Оценка:
Здравствуйте, arkhivania, Вы писали:

A>не понравилось SQL Compact — у такая опция


Нужно смотреть план и думать, как его поломать.
http://www.bigresource.com/Tracker/Track-ms_sql-aeUGu0G9/
Re[8]: Помогите с производительностью запроса
От: arkhivania  
Дата: 23.03.10 15:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, arkhivania, Вы писали:


A>>не понравилось SQL Compact — у такая опция


А>Нужно смотреть план и думать, как его поломать.

А>http://www.bigresource.com/Tracker/Track-ms_sql-aeUGu0G9/

хм, меня смущает то, что если я конструирую запрос, то время выполнения запроса приближается к 0, а если я использую параметры, то получается ерунда. А как-то можно увидеть сам запрос, который посылается SQL Compact — у ?
Re[9]: Помогите с производительностью запроса
От: Ellin Россия www.rsdn.ru
Дата: 23.03.10 15:34
Оценка:
A>хм, меня смущает то, что если я конструирую запрос, то время выполнения запроса приближается к 0, а если я использую параметры, то получается ерунда. А как-то можно увидеть сам запрос, который посылается SQL Compact — у ?

Можно настроить логирование:
здесь
Re[10]: Помогите с производительностью запроса
От: arkhivania  
Дата: 23.03.10 15:54
Оценка:
Здравствуйте, Ellin, Вы писали:

A>>хм, меня смущает то, что если я конструирую запрос, то время выполнения запроса приближается к 0, а если я использую параметры, то получается ерунда. А как-то можно увидеть сам запрос, который посылается SQL Compact — у ?


E>Можно настроить логирование:

E>здесь

Странно что этот хелп в ветке по SQL 2005
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.