Какой из этих двух проектов БД приведет к более быстрым запросам? - PullRequest
0 голосов
/ 05 августа 2009

Что будет быстрее, от чего будет зависеть ответ:

1) Поиск числового идентификатора в таблице БД A, а затем запрос к другой таблице B для всех экземпляров этого числового идентификатора. где таблица B, вероятно, будет в 100 раз больше.

2) Запрос к таблице B напрямую, используя для рассматриваемой строки.

Теперь, когда я пишу это, я думаю, что решение 1 более быстрое (что я и собирался делать в любом случае), но хотелось бы узнать ваши мысли.

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

Ответы [ 3 ]

2 голосов
/ 05 августа 2009

Фактически вы создаете свой собственный индекс. Базы данных делают это очень хорошо. Добавьте соответствующие индексы в таблицу B, и пусть Db сделает всю работу.

1 голос
/ 05 августа 2009

Это будет в основном зависеть от используемого вами механизма SQL (Oracle, SQL Server, MySQL, Postgres и т. Д.), Поскольку все они будут оптимизированы различными способами.

Исходя из моего опыта работы с SQL Server, я не видел какой-либо ощутимой разницы между поиском числа или поиском строки при условии, что целевые столбцы соответствующим образом проиндексированы. Таким образом, я бы, вероятно, выбрал (2), так как это на один запрос SQL меньше. Однако я бы также проверил каждое решение для проверки времени ...

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

0 голосов
/ 05 августа 2009

Это больше вопрос нормализации?

Хранится ли строка несколько раз в вашей таблице B? Вы спрашиваете, следует ли хранить эту строку в таблице B, а также в таблице A.

Я бы сказал, вариант 1 - лучший путь.

Таблица A - ID_A, Имя, Данные ...

Таблица B - ID_B, ID_A, Данные ...

SELECT
    *
FROM
    TableA
INNER JOIN
    TableB
ON
    TableA.ID_A = TableB.ID_A
WHERE
    TableA.Name LIKE '%search%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...