2011-01-01 5 views
2

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

спасибо.

+1

Вы можете показать sql? сколько строк выбрано? сколько столбцов выбрано? используете ли вы первичный ключ в sql? – k3b

+0

sql очень прост .... это выбрать * от сотрудника. – Thomas

+0

Загрузка 50000 записей за одну минуту в порядке. Вам действительно нужны все 50000 записей за раз? Я стараюсь загружать меньше данных, применяя фильтр «где имя типа« T% », и установка индекса в этом поле решит вашу проблему. – k3b

ответ

3

Самый быстрый способ оптимизации индексов в таблице - использовать SQL Server Tuning Advisor. Взгляд http://www.youtube.com/watch?v=gjT8wL92mqE < - здесь

+0

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

1

Если вы работаете в select * from employee (согласно запросу), то никакая индексация вам не поможет. Это запрос «Каждый столбец для каждой строки»: для этого нет магии.

Добавление ГДЕ не поможет обычно для запроса select *.

Что вы можете проверить - это обслуживание индекса и статистики. Вы делаете? Вот Google search

Или изменить, как вы используете данные ...

Edit:

Почему ИНЕКЕ обычно не поможет ...

Если вы добавите, где это не PK ..

  • вам все равно нужно сканировать таблицу, если не добавить индекс искомого столбца
  • то вам понадобится поиск по ключевому слову/закладке, если вы не сделаете его закрытием
  • с SELECT * вам нужно добавить все столбцы в индекс, чтобы он покрывал
  • для многих хитов, индекс, вероятно, будет проигнорирован, чтобы избежать поиск по ключевым словам/закладкам.

Если не проблема сети или, например, вопрос читает все столбцы не отсутствия ГДЕ

Если вы сделали SELECT col13 FROM MyTable и имели индекс col13, вероятно, будет использоваться индекс.

SELECT * FROM MyTable WHERE DateCol < '20090101' с индексом на DateCol, но согласованный 40% от стола, он, вероятно, будет проигнорирован или вы хотите иметь дорогой ключ/закладку Lookups

+0

Добавление 'where' не поможет? Это звучит неправильно для меня .. Ссылка? – Blorgbeard

+0

@Blorgbeard: см. Мое обновление, пожалуйста. Ссылка - это мои вещи, подобные этому http://stackoverflow.com/badges/840/sql-server-2005. Butm, если этого недостаточно http://www.simple-talk.com/sql/learn-sql-server/using-covering-indexes-to-improve-query-performance/ + другие статьи там. Как это http://www.simple-talk.com/sql/performance/index-selection-and-the-query-optimizer/ – gbn

1

Выберите только столбцы, которые нужны, а не выбрать *. Если в таблице есть несколько больших столбцов, например. OLE или другие двоичные данные (возможно, для хранения изображений и т. Д.), То вы можете передавать гораздо больше данных с диска и по сети, чем вам нужно.

Как уже отмечалось, индекс не помогает вам при выборе всех строк (нет предложения where). Использование индекса в таких случаях будет медленнее из-за чтения индекса и поиска таблицы для каждой строки, а также полного сканирования таблицы.

0

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

Имеет ли ваш запрос ORDER BY или это буквально только select * from employee?

Каково определение таблицы employee? Он содержит какие-либо особенно широкие столбцы? Вы храните в нем двоичные данные, такие как их резюме или фотографию сотрудника?

Как вы выдаете SQL и извлекаете результаты?

уровень изоляции Что ваши заявления выберите бегущие в (Вы можете использовать SQL Profiler, чтобы проверить это)

Вы встречая блокировки? Увеличивает ли добавление NOLOCK запрос быстрее?

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