Oracle выберите производительность запроса - PullRequest
1 голос
/ 28 июня 2010

Я работаю над приложением.Он находится на начальном этапе, поэтому число записей в таблице невелико, но позже в одной таблице будет около 1 миллиона записей.

Я хочу знать, какие моменты следует учитывать при написании selectзапрос, который будет извлекать огромное количество данных из таблицы, чтобы не снижать производительность.

Ответы [ 3 ]

7 голосов
/ 28 июня 2010

Первое правило:

  • Не извлекайте огромные объемы данных обратно в приложение.

Если вы не собираетесь отображать каждый элемент вогромное количество данных, не выбирайте его.Связь между СУБД и приложением является (относительно) медленной, поэтому по возможности избегайте ее.Это не так медленно, что вы не должны использовать СУБД или что-то подобное, но если вы можете уменьшить объем данных, передаваемых между СУБД и приложением, общая производительность, как правило, улучшится.

Часто одинпростой способ сделать это - перечислить только те столбцы, которые вам действительно нужны в приложении, вместо использования «SELECT *» для извлечения всех столбцов, когда вы будете использовать только 4 из 24 существующих.

Второе правило:

  • Постарайтесь, чтобы СУБД не приходилось просматривать большие объемы данных.

По мере возможности минимизируйте работу, которую должна выполнять СУБД,Он занят и, как правило, занят от имени многих людей в любой момент времени.Если вы сможете сократить объем работы, выполняемой СУБД для обработки вашего запроса, все будут счастливы.

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

(Я должен упомянуть: ни один из этих советов не является конкретнымв Oracle - вы можете применить его к любой СУБД.)

1 голос
/ 28 июня 2010

Несколько моментов, которые следует запомнить:

  • Извлечение только тех столбцов, которые необходимо использовать на стороне клиента.
  • Убедитесь, что вы настроили правильные индексы, которые помогут вамнайти записи.Это можно сделать позже, но лучше спланировать их, если сможете.
  • Убедитесь, что вы правильно учли ширину столбцов и размеры данных.Не используйте INT, когда TINYINT будет содержать все возможные значения.Строка с 100 полями TINYINT будет загружаться быстрее, чем строка с 100 полями INT, и вы также сможете получать больше строк за чтение.
  • В зависимости от того, насколько чистыми вам нужны данные, они могутдопустимо выполнять «грязное чтение», когда база данных извлекает данные во время обновления.В некоторых случаях это может значительно ускорить процесс, хотя это означает, что полученные вами данные могут быть не самыми последними.
  • Дайте вашему пиву DBA.И обнимает.

Джейсон

1 голос
/ 28 июня 2010

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

Зачастую, когда дело доходит до производительности, часто бывает много настроек. Однако 80% производительности определяется из SQL-кода. Ниже приведены ссылки, которые могут вам помочь.

http://www.smart -soft.co.uk / Oracle / оракула настройки производительности-part7.htm
http://www.orafaq.com/wiki/Oracle_database_Performance_Tuning_FAQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...