2015-01-15 5 views
2

OrientDB версия 1.7.10Новичок: OrientDB Basic SQL Query

Мы бежим следующие два запроса и количество записей, возвращаемых различны.

select from (select from sitedata) where localdate='2014-09-24' 
select from sitedata where localdate='2014-09-24' 

Первый запрос возвращает 6 записей, где второй возвращает только одну запись.

Sitedata - это вершина, а localdate - свойство даты. Существует также индекс, созданный на localdate.

Концептуально в чем разница между двумя запросами? В первом сценарии мы создаем так называемое встроенное представление в мире РСУБД, а затем помещаем фильтр в записи в виде строки. Мы предполагаем, что он должен внутренне извлекать все записи из базы данных и затем фильтровать в памяти. Во втором запросе данные напрямую фильтруются и индекс будет использоваться.

+2

Обновление: проблема была из-за индекса. Индекс был создан как словарь, и это вызывало проблему. Изменение индекса устраняет проблему. – Dobi

ответ

2

Разница в том, что в первом запросе индекс не используется. Так что делает полное сканирование класса sitedata и примените фильтр

Двигатель не может использовать индекс, поскольку цель запроса является Вложенным запросом, поэтому оценить вложенный и затем внешний запрос при применении фильтрации в памяти

+0

Теоретически два запроса всегда будут давать одинаковый результат. В этом случае индекс был случайно установлен в localdate столбца в качестве словаря. Отбрасывание индекса заставило два запроса вернуть один и тот же набор данных. Поэтому проблема была связана с индексом. – Dobi