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

"Select * from threads where latitudes >= @ThirtyLatMin AND @ThirtyLatMax >= latitudes AND longitudes >= @ThirtyLonMin AND @ThirtyLonMax>=longitudes order by activities desc"
sql
0
user3329640 18 Апр 2014 в 07:06

2 ответа

Лучший ответ

Любая современная СУБД должна иметь возможность обрабатывать несколько индексов данной таблицы; Хотя верно, что обслуживание индекса требует затрат во время INSERT и UPDATE таблиц, эти затраты обычно перевешиваются соответствующим использованием индекса во время оператора SELECT (и других запросов).

Несколько общих советов, основанных на вашем вопросе (и образце запроса):

  1. Верните только те данные, которые вам нужны; использование SELECT * в запросе обычно является красным флажком при настройке производительности, потому что это означает, что кодировщик не нашел времени, чтобы разъяснить, что было необходимо вызывающему приложению. Если вы возвращаете кучу данных, которые не используете, вы сдерживаете свою производительность.

  2. После того, как вы указали возвращаемые столбцы, попробуйте «покрыть» их индексом; другими словами, создайте индексный столбец, содержащий всю информацию, необходимую для удовлетворения запроса. Обратите внимание, что это становится балансирующим действием при работе с несколькими разными запросами (разными столбцами), которые попадают в одну и ту же таблицу. Слишком много индексов в таблице увеличивает стоимость (см. Заголовок) и в конечном итоге может перевесить преимущества. Обратите внимание, что разные СУБД по-разному справляются с этим; например, Microsoft SQL Server использует синтаксис INCLUDE для представления широких индексов с несколькими столбцами в покрывающей емкости без значительных накладных расходов.

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

  4. По возможности перемещайте сортировку из базы данных. СОРТИРОВКА - дорогостоящая операция, и если вы не используете ее для помощи в фильтрации данных (например, поиске TOP N), вы, вероятно, заметите улучшение, переместив ее из SQL.

0
Stuart Ainsworth 18 Апр 2014 в 04:02

Я прочитал, что индексы не должны использоваться в таблице, которая обновляется и создает

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

Прочтите http://use-the-index-luke.com, чтобы получить хорошее представление о индексы в SQL.

0
Andy Lester 18 Апр 2014 в 05:20