2014-02-20 3 views
0

Ребята у меня очень странное поведение. У меня есть один стол с несколькими полями, а один - штамп времени. Когда я бегуSQL-запрос медленный по сравнению с меткой времени

select top 10 * from mytable 

он работает нормально, но когда я исполняю

select top 10 * from mytable where TIMESTAMP > '2013-07-1' 

становится veryyyyyyyyyy медленно.

Заранее спасибо ..

+0

Причина в том, что ваш запрос должен отфильтровать некоторые данные, прежде чем он сможет сделать топ 10. – Incognito

+0

Что такое решение, оно действительно медленное, как мертвое. – abidkhan303

ответ

4

Ваши запросы выбора первые десять строк столкнулись, которые удовлетворяют условиям запроса. Первая версия может занимать первые десять строк. Это должно быть довольно быстро.

При добавлении предложения where запрос должен искать по всем строкам, пока не найдет те, которые соответствуют предложению where. В большой таблице, где несколько строк удовлетворяют условию, это может потребовать чтения большого количества данных. Принимая много и много времени.

Решение является индексом. Если добавить индекс TIMESTAMP, то этот запрос будет работать быстрее:

двигатель
create index mytable_timestamp on mytable(timestamp); 

Запрос может использовать индекс для быстрого поиска строк, которые удовлетворяют условию where дизъюнкцию.

Кстати, полезно использовать форматы «YYYY-MM-DD» для констант даты, особенно потому, что они соответствуют стандарту ISO для дат (и поэтому поддерживаются большинством баз данных). Правильной формой будет '2013-07-01'.

Смежные вопросы