|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.02.2012, 12:00 | #1 |
Форумчанин
Регистрация: 24.04.2008
Сообщений: 440
|
Создание индексов
Почитал многое про индексы, но не до конца понятно, как ими пользоваться.
У меня есть к примеру таблица table1 и поля в ней (id_user,login,password), она у меня заведена в MSSQL. Правильно ли я понял, чтобы использовать индекс надо на вкладке indexes создать индекс типа кластера и указать ему поле login, и он про индексирует сам таблицу 1? Или же я вручную создаю поле login_index и отдельную таблицу, уникальными именами пользователей и присвоенным им индексам как в table 2 Что является кластером в table1 ? Кластерный индекс, это когда у таблице имеется id как инкремент? Не кластерный, это таблица без поля id (как куча)? Тут login_index-внешний ключ ? table1 id_user|login|password|login_index( FK)| ---------------------------------- 1 |ivan|123 |1.ivan | ---------------------------------- 2 |petr|231 |1.petr | ---------------------------------- 3 |oleg|456 |1.oleg | ---------------------------------- 4 |kolja|789 |1.kolja | ---------------------------------- 5 |griha|101 |1.griha | ---------------------------------- 6 |miha|111 |1.miha | ---------------------------------- 7 |miha|123 |1.miha | ---------------------------------- 8 |miha|123 |1.miha | ---------------------------------- тут поле login, будет уникальным ? а login_index - это будет поле индекса? Для связки с первой таблицей как FK ? table2 login|login_index| ----------------- ivan|1.ivan | ----------------- petr|1.petr | ----------------- oleg|1.oleg | ----------------- kolja|1.kolja | ----------------- griha|1.griha | ----------------- miha|1.miha | ----------------- Для чего создаются индексы я понял, не понятно как их использовать на примере. 1 или 2-х таблиц, какие поля в них создавать, а самое главное как создавать индексы. Читал тут но там особо нет примеров и примеры непонятные http://www.sql.ru/articles/mssql/03013101Indexes.shtml http://msdn.microsoft.com/ru-ru/library/ms190969.aspx http://ru.wikipedia.org/wiki/%D0%98%...BD%D1%8B%D1%85)
1 старый программист, лучше новых 2-х
|
02.02.2012, 12:51 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Дополнительных таблиц не надо, индексы создаются для существующих полей таблицы. Чем кластерный индекс (который только один может быть в таблице) отличается от некластерного можно, например, здесь подглядеть http://www.rsdn.ru/forum/db/765269.all.aspx. Создание индексов командой CREATE INDEX. Команда отработала - индекс создан, дальше не ваша забота, он при редактировании данных обновится. Чем больше индексов в таблице - тем в общем случае быстрее выборка по условию данных из неё и тем медленнее обновление данных. Обычно индексы строятся по полям, наиболее часто используемых во WHERE запросов к этой таблице. UNIQUE-индекс кроме того не даст создать запись с неуникальным ключем указанным при создании индекса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 02.02.2012 в 12:54. |
02.02.2012, 13:05 | #3 | |
Форумчанин
Регистрация: 24.04.2008
Сообщений: 440
|
Цитата:
находящиеся в этой таблице, физически (в дисковом файле) упорядочиваются в соответствии с условием индексирования). Именно поэтому кластерный индекс может быть на таблицу только один. Некластерный индекс хранит ссылки на местоположение данных в дисковом файле. Это описание читать про кластерный и не кластерный индекс ? Я не совсем понимаю эту фразу если у таблицы есть кластерный индекс, то записи, находящиеся в этой таблице, физически (в дисковом файле) упорядочиваются в соответствии с условием индексирования) Именно поэтому кластерный индекс может быть на таблицу только один. идентификатор(инкремент) в таблице не является индексом ? Можно из своего опыта привести пример, как вы это понимаете на примере 2 таблиц как будет выглядеть каждая имея кластерный и некластерный индекс? В старых топах не у кого спросить.
1 старый программист, лучше новых 2-х
|
|
02.02.2012, 13:42 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 02.02.2012 в 14:51. |
02.02.2012, 16:18 | #5 |
Форумчанин
Регистрация: 24.04.2008
Сообщений: 440
|
В принципе почитав в рунете инфу, я разобрался, в чем отличие кластерного от некластерного.
И теперь еще последние 2 вопроса заключающие: 1) Уникальный индекс можно создать, для полей содержащих не дублирующие значения, а не уникальный для любых полей ? 2) Для какого поля лучше создавать кластерный индекс, для уникального (PK), или для любого поля таблицы?
1 старый программист, лучше новых 2-х
|
02.02.2012, 16:30 | #6 | ||
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание первичных индексов в db файле paradox7 | Nikolay88_x | C/C++ Базы данных | 2 | 10.01.2012 20:59 |
удаление индексов массива | TotKtoNado | БД в Delphi | 13 | 05.08.2011 17:03 |
найти добуток индексов | misha25525 | Помощь студентам | 0 | 11.04.2010 11:57 |
найти суму индексов | misha25525 | Помощь студентам | 0 | 11.04.2010 11:51 |