Приветствую! Я не профи в БД программировании, но использую в своем приложении 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 и посмотрите, не тратится ли львиная доля времени на него.
И оцените последующее время выполнения команды, конечно.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 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) добавить?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, arkhivania, Вы писали:
A>>пробовал. Prepare проскакивает быстро, время примерно такое-же. Сам Fill адаптера долго проходит. А>А если в запрос option(recompile) добавить?
хм... не очень понял. а как это?
Re[5]: Помогите с производительностью запроса
От:
Аноним
Дата:
23.03.10 15:06
Оценка:
Здравствуйте, arkhivania, Вы писали: А>>А если в запрос option(recompile) добавить?
A>хм... не очень понял. а как это?
SELECT [CaseLevel]
FROM [dbo].[CaseLevel]
option(recompile)
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, arkhivania, Вы писали: А>>>А если в запрос option(recompile) добавить?
A>>хм... не очень понял. а как это?
А>
хм, меня смущает то, что если я конструирую запрос, то время выполнения запроса приближается к 0, а если я использую параметры, то получается ерунда. А как-то можно увидеть сам запрос, который посылается SQL Compact — у ?
A>хм, меня смущает то, что если я конструирую запрос, то время выполнения запроса приближается к 0, а если я использую параметры, то получается ерунда. А как-то можно увидеть сам запрос, который посылается SQL Compact — у ?
Здравствуйте, Ellin, Вы писали:
A>>хм, меня смущает то, что если я конструирую запрос, то время выполнения запроса приближается к 0, а если я использую параметры, то получается ерунда. А как-то можно увидеть сам запрос, который посылается SQL Compact — у ?
E>Можно настроить логирование: E>здесь