Методы оптимизации Sql - PullRequest
1 голос
/ 14 июля 2009

Я хочу знать методы оптимизации для баз данных, которые имеют почти 80 000 записей, список возможностей для оптимизации

я использую для моего мобильного проекта на платформе Android я использую sqlite, мне требуется много времени, чтобы получить данные

Спасибо

Ответы [ 8 ]

9 голосов
/ 14 июля 2009

Что ж, при наличии только 80 000 записей и при условии, что ваша база данных хорошо спроектирована и нормализована, достаточно добавить индексы для столбцов, которые вы часто используете в предложениях WHERE или ORDER BY.

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

ETA:

Я вижу, вы обновили вопрос, упомянув, что это на мобильной платформе - это может немного изменить ситуацию.

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

Какая из этих таблиц войдет в данную строку, зависит от того, как вы решите ее разбить. Например, если у вас есть поле customer_id, которое может варьироваться от 0 до 10000, вы можете поместить клиентов 0–2500 в table1, 2500–5000 в table2 и т. Д., Разделив одну большую таблицу на 4 меньших. Тогда в вашем приложении будет логика, которая будет определять, какую таблицу (или таблицы) запрашивать для получения данной записи.

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

1 голос
/ 14 июля 2009

Такая широкая тема, которая зависит от того, для чего вы хотите оптимизировать. Но основы:

  • индексы. Хорошая стратегия индексации важна, важно индексировать правильные столбцы, которые часто запрашиваются / упорядочиваются. Тем не менее, чем больше индексов вы добавите, тем медленнее будут ваши INSERT и UPDATE, так что компромисс будет.
  • обслуживание. Сохраняйте индексы дефрагментированными и обновляйте статистику
  • оптимизированных запросов. Идентифицируйте медленные запросы (используя профилировщик / встроенную информацию, доступную начиная с SQL 2005 и далее) и посмотрите, могут ли они быть написаны более эффективно (например, избегайте CURSOR, где возможно использование операций на основе множеств
  • параметризация / СФС. Используйте параметризованный SQL для запроса базы данных, а не adhoc SQL с жестко заданными значениями поиска. Это позволит улучшить кэширование и повторное использование плана выполнения.
  • начать с нормализованной схемы базы данных, а затем отменить нормализацию, если это необходимо для повышения производительности

80 000 записей - это не так много, поэтому на этом я остановлюсь (большие базы данных с миллионами строк данных, я бы предложил разделить данные)

1 голос
/ 14 июля 2009

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

1 голос
/ 14 июля 2009

80 тыс. Строк - это не много строк в наши дни. Умный индекс (ы) с запросами, которые используют эти индексы, будут вам полезны.

1 голос
/ 14 июля 2009
  • Создание индексов
  • Удалить индексы

  • Нормализация

  • Денормализовать
0 голосов
/ 14 июля 2009

Одна вещь, которую стоит знать, это то, что использование функции в инструкции where в индексированном поле приведет к тому, что индекс не будет использоваться.

Пример (Oracle):

SELECT indexed_text FROM your_table WHERE upper(indexed_text) = 'UPPERCASE TEXT';
0 голосов
/ 14 июля 2009

Прежде всего, индексы действительно необходимы, если вам нужна хорошо работающая база данных.

Кроме того, методы зависят от того, что вам нужно оптимизировать: размер, скорость, память и т. Д.

0 голосов
/ 14 июля 2009

Вы действительно должны быть более конкретными в отношении того, что вы хотите сделать. Каково ваше сочетание операций? Какова структура вашего стола? Совет generic состоит в том, чтобы использовать индексы соответствующим образом, но с таким общим вопросом вы не получите большой помощи.

Кроме того, 80 000 записей - ничто. Это таблица среднего размера, и ни одна достойная база данных не должна потеть.

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