Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Лучший индекс зависит от содержания таблицы и что Вы пытаетесь выполнить.
Взятый пример членская база данных с Первичным ключом членского социального обеспечения Numnber. Мы выбираем S.S., потому что основное приложение относится к человеку таким образом, но Вы также хотите создать поисковую функцию, которая использует членское имя и фамилию. Я тогда предложил бы создать индекс по тем двум полям.
необходимо сначала узнать, какие данные Вы будете запрашивать и затем делать определение, которых данных Вам нужно индексированный.
Старое эмпирическое правило было столбцами, которые используются много в том, ГДЕ, ORDER BY, и пункты GROUP BY или любой, который, казалось, часто использовался в соединениях. Следует иметь в виду, что я посылаю к индексам, НЕ Первичному ключу
Не дать ответ 'выхода ванили', но он действительно зависит от того, как Вы получаете доступ к данным
Это должно быть еще быстрее при использовании GUID. Предположим, что у Вас есть записи
, Если у Вас есть индекс (двоичный поиск, можно найти физическое местоположение записи, которую Вы ищете в O (LG n) время, вместо того, чтобы искать последовательно O (n) время. Это вызвано тем, что Вы не знаете то, что записывает Вас, имеют в Вас таблицу.
Ваш первичный ключ должен всегда быть индексом. (Я был бы удивлен, не было ли это автоматически индексировано SQL MS на самом деле.) Вы должны также столбцы индекса Вы SELECT
или ORDER
часто; их целью является и быстрый поиск единственного значения и более быстрая сортировка.
единственная реальная опасность в индексации too
много столбцов замедляет изменения в строках в больших таблицах как индексы вся потребность, обновляющая также. Если Вы действительно не уверены, что индексировать, только время Ваши самые медленные запросы, посмотрите на то, какие столбцы используются чаще всего и индексируют их. Тогда посмотрите, насколько быстрее они.
Столбец GUID не является лучшим кандидатом на индексацию. Индексы подходят лучше всего для столбцов с типом данных, которому можно дать некоторое значимое распоряжение, т.е. отсортировать (целое число, дата и т.д.).
не имеет значения, если данные в столбце обычно увеличиваются. При создании индекса на столбце индекс создаст свою собственную структуру данных, которая просто сошлется на фактические объекты в таблице без беспокойства о сохраненном порядке (некластерный индекс). Тогда, например, двоичный поиск может быть выполнен по Вашей индексной структуре данных для обеспечения быстрого извлечения.
также возможно создать "кластерный индекс", который физически переупорядочит Ваши данные. Однако у Вас может только быть один из них на таблицу, тогда как у Вас может быть несколько некластерных индексов.
Типы числовых данных, которые заказаны в порядке возрастания или убывания, являются хорошими индексами по нескольким причинам. Во-первых, числа обычно быстрее для оценки, чем строки (varchar, символ, nvarchar, и т.д.). Во-вторых, если Ваши значения не заказаны, строки и/или страницы, возможно, должны быть переставлены собирающийся обновление Ваш индекс. Это дополнительно служебный.
, Если Вы используете SQL Server 2005 и набор при использовании uniqueidentifiers (гуиды), и НЕ нуждаетесь в них, чтобы быть случайной природы, проверить последовательный тип uniqueidentifier.
Наконец, если Вы говорите о кластерных индексах, Вы говорите о виде физических данных. Если у Вас есть строка как Ваш кластерный индекс, который мог бы стать ужасным.
Любой столбец, который регулярно будет используемым для извлечения данных из таблицы, должен быть индексирован.
Это включает: внешние ключи -
select * from tblOrder where status_id=:v_outstanding
описательные поля -
select * from tblCust where Surname like "O'Brian%"
столбцы не должны быть уникальными. На самом деле можно получить действительно хорошую производительность от двоичного индекса при поиске исключений.
select * from tblOrder where paidYN='N'
В целом (я не использую mssql, так не может прокомментировать конкретно), первичные ключи делают хорошие индексы. Они уникальны и должны были определить значение. (Кроме того, первичные ключи делают такие хорошие индексы, что им обычно создавали индекс автоматически.)
индекс является эффективно копией столбца, который был отсортирован для разрешения двоичного поиска (который намного быстрее, чем линейный поиск). Системы баз данных могут использовать различные приемы для ускорения поиска еще больше, особенно если данные более сложны, чем простое число.
Мое предложение не должно было бы использовать индексы первоначально и представить Ваши запросы. Если особый запрос (такой как поиск людей фамилией, например) выполняется очень часто, попытайтесь создать индекс по атрибутам relevate и профилю снова. Если существует значимое ускорение на запросах и незначительное замедление на вставках и обновления, сохраните индекс.
(Извинения, если я повторяю материал, упомянутый в Вашем другом вопросе, я не столкнулся с ним ранее.)
Все это зависит, на каких запросах Вы ожидаете спрашивать о таблицах. Если Вы просите все строки с определенным значением для столбца X, необходимо будет сделать полное сканирование таблицы, если индекс не может использоваться.
Индексы будут полезны если:
Они не будут полезны если:
столбцы Первичного ключа являются обычно замечательными для индексации, потому что они уникальны и часто привыкли к строкам поиска.
Некоторые люди ответили на подобный вопрос здесь: , Как Вы знаете, каков хороший индекс?
В основном, это действительно зависит от того, как Вы будете запрашивать свои данные. Вы хотите индекс, который быстро определяет маленькое подмножество Вашего набора данных, который относится к запросу. Если Вы никогда не запрашиваете меткой даты, Вам не нужен индекс на ней, даже если это главным образом уникально. Если все, что Вы делаете, получают события, которые произошли в определенном диапазоне дат, Вы определенно хотите тот. В большинстве случаев индекс на поле бессмыслен - но если все, что Вы делаете, получают статистику обо всех штекерах, и отдельно, обо всех розетках, это могло бы стоить Вашего, в то время как создать тот. Фигура, чем Ваши шаблоны запроса будут, и доступ, к которому параметр сужает пространство поиска больше всего, и это - Ваш лучший индекс.
Также рассматривают вид индекса, который Вы делаете - B-деревья хороши для большинства вещей и позволяют запросы диапазона, но хешируют индексы, получают Вас прямо к точке (но не позволяйте диапазоны). Другие типы индексов имеют другие за и против.
Удачи!
Это действительно зависит от Ваших запросов. Например, если Вы почти только пишете в таблицу тогда, лучше не иметь любые индексы, они просто замедляют записи и никогда не привыкают. Любой столбец, который Вы используете для присоединения к другой таблице, является хорошим кандидатом на индекс.
кроме того, читайте о функции Missing Indexes. Это контролирует фактические запросы, используемые против Вашей базы данных, и может сказать Вам, какие индексы улучшили бы производительность.