SQL-запрос Informix: два похожих запроса, возвращающие разные результаты
Вопрос
У меня есть запрос Informix SQL, который возвращает набор строк. Он был немного изменен для новой версии сайта, над которым мы работали, и наш QA заметил, что новая версия возвращает разные результаты. После исследования мы обнаружили, что единственное различие между двумя запросами заключалось в количестве возвращаемых полей.
ПредложенияFROM, WHERE и ORDER BY идентичны, а имена столбцов в части SELECT не влияют на результаты. Это было только количество полей, которые вызвали проблему.
Есть идеи?
Решение 2
Движок Informix SQL использует индексы в таблицах на основе столбцов, которые мы хотим получить. При извлечении разных столбцов мы использовали разные индексы и, следовательно, получали результаты в другом порядке.
Другие советы
Добавление директивы порядка соединения - + ORDERED
решает проблему, позволяя вам каждый раз получать результаты в предсказуемом порядке.
Ссылки ведут на описание того, как работает директива http : //publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp тема = / com.ibm.sqls.doc / sqls1144.htm
Используйте ORDERED директиву порядка соединения заставить оптимизатор объединять таблицы или представления в том порядке, в котором они появляются в предложении FROM запрос.
SELECT --+ ORDERED
name, title, salary, dname
FROM dept, job, emp WHERE title = 'clerk' AND loc = 'Palo Alto'
AND emp.dno = dept.dno
AND emp.job= job.job;
Я так понимаю, что под «полями» вы подразумеваете количество строк выходных данных? По моему опыту, люди используют «поля» и «столбцы» в качестве синонимов. Учитывая, что имена в списке выбора не изменились, вы, вероятно, получали только различия в количестве возвращаемых строк.
При одинаковых таблицах, входных данных и запросе размер и содержание набора результатов должны быть одинаковыми независимо от плана запроса или версии сервера. Последовательность набора результатов может отличаться, если только вы не наложите порядок на результаты, но это допустимо в любой СУБД.
Если вы получаете наборы результатов разных размеров, вам, вероятно, следует обратиться в службу технической поддержки IBM. По крайней мере один из наборов результатов неверен, а неправильные результаты всегда серьезны.
Хотя подсказки могут помочь производительности, и обычно помогает стандартная рекомендация «запустить UPDATE STATISTICS (с соответствующими наборами параметров)», ни наличие, ни отсутствие индексов не должны изменять результирующий набор, когда базовые данные стабильны. (Если данные меняются, возникает множество вопросов и сложностей, о которых следует беспокоиться.)
Я могу придумать только два объяснения этому:
<Ол>Я понимаю, что вы не хотите публиковать определения SQL и таблицы, но это затрудняет диагностику.