2015-12-25 3 views
2

Оправдывает ли порядок заказов в порядке на pefrormance? У меня есть две таблицы А и Б. Я пытаюсь присоединиться к ним так:Условия соединения SQL-соединения с порядком

SELECT * FROM A 
INNER JOIN B on B.ID_A = A.ID 

В этом случае Жар использования NATURAL план вместо того, чтобы с помощью внешнего ключа.

SELECT * FROM A 
INNER JOIN B on A.ID = B.ID_A 

работает хорошо.

Это нормально?

+0

не влияет на внутреннее соединение, но вы используете левое соединение и правое соединение, а затем влияет на производительность. –

+0

Какую версию Firebird вы используете? Я никогда не видел такой проблемы с Firebird, так что, возможно, это просто ошибка в одной из версий ... –

+0

@MaximVotyakov Я использую Firebird 2.5 –

ответ

1

Я предполагаю, что вы используете Firebird с версией старше 2.5.4 (возможно, 2.5.3). И у него была ошибка http://tracker.firebirdsql.org/browse/CORE-4530, зафиксированная в 2.5.4. Обновите Firebird 2.5.5 и проверьте, не исчезла ли ваша проблема.

0

Я не знаком с firebird, но обычно это не имеет значения для внутреннего соединения. И в новой версии Oracle или SQLServer или MySQL или Postgresql это не повлияет на производительность. мы объясняем, как проверить, как База данных выбирает правильный способ Присоединиться, вы можете попробовать.

0

Этот запрос в порядке, но убедитесь, что B.ID_A является индексом (для быстрого выполнения)

Не используйте * в SQL запросе, использовать только необходимые столбцы ...

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

Пример

SELECT A.ID, A.column1, B.column2, FROM A 
INNER JOIN B on B.ID_A = A.ID LIMIT 0,100 
+0

Я написал '*' там только, например. Как я знаю, Firebird автоматически создает индекс для внешнего ключа. Но он не использует этот индекс в первом случае. –

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