Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.17;
Скачать: CL | DM;

Вниз

Индексация базы   Найти похожие ветки 

 
blazerad   (2008-06-30 22:35) [0]

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


 
Ega23 ©   (2008-06-30 22:50) [1]

Забей.


 
tesseract ©   (2008-06-30 22:56) [2]

Математика, зачем она нужна ?  И вообще зачем учиться, если всё можно в гугле найти ?


 
MsGuns ©   (2008-06-30 23:34) [3]

У индексов одно единственное назначение - повышение скорости выборок. Однако при неправильном их использовании можно получить эффект наоборот. Например, если есть таблица, состоящая из одного ключа и 10 длинных символьных полей, то создание индексов хотя бы по половине полей может не ускорить, а существенно замедлить выборку.


 
Игорь Шевченко ©   (2008-06-30 23:36) [4]


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


пример в студию, когда замедляется именно выборка из-за наличия индексов.


 
MsGuns ©   (2008-06-30 23:38) [5]

Вот делать мне нефих, как тебе примеры приводить. Возьми сам в том же аксесе нарисуй табличку, залей в нее тыс.50 записей и повыбирай


 
Игорь Шевченко ©   (2008-06-30 23:40) [6]


> Вот делать мне нефих, как тебе примеры приводить


Вынужден констатировать факт моей неоспоримой правоты в данной дискуссии, дальшейшее обсуждение считаю нецелесообразным


 
MsGuns ©   (2008-06-30 23:42) [7]

На здоровье


 
sniknik ©   (2008-07-01 00:20) [8]

> пример в студию, когда замедляется именно выборка из-за наличия индексов.
вообщето, по классике замедляется скорость вставки изза индексов (исключение кластерный, да и то не всегда) но если хотите пример замедления выборки, пожалуйста -
аксесс, таблица с 22 полями (неважно, просто под руку такая попалась), общее количество записей 327680
индексов нет, выборка
SELECT * FROM Table1 WHERE IndexField=1
результат 327680 записей за 3,094 сек.
делаем индекс
CREATE INDEX IndexField ON Table1 (IndexField)
повторяем запрос
SELECT * FROM Table1 WHERE IndexField=1
результат 327680 записей за 6,532 сек.

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

> и нужна ли она вообще?
"вообще" вопрос бессмысленен (как и любой другой "глобальный" вопрос), смысл есть только в частностях, конкретике, для чего предполагается использовать, с какими данными в каких случаях... более точный ответ, на "нужна ли" для конкретного случая, можно например узнать из плану реального запроса на реальных данных, с индексом/-ами и без. (или просто время сравнить, если данных много и время заметно различается)


 
Игорь Шевченко ©   (2008-07-01 00:43) [9]


> догадаться почему нетрудно конечно (все данные перед глазами,
>  слепой только не увидит), но это факт, выборка по индексу
> медленнее "прямой", и выигрывают индексы не изза ускорения
> выборки по ним, а изза более быстрого отбора нужного...
> есть разница.


Это только Access является таким счастливым исключением ?


 
Petr V. Abramov ©   (2008-07-01 01:26) [10]


> и зачем она нужна.

нужна, чтоб база быстрей работала. Если у тебя не тормозит, но нифих не нужна, т.к. место жрет на диске


 
Petr V. Abramov ©   (2008-07-01 01:29) [11]


> sniknik ©   (01.07.08 00:20) [8]

вопрос не к
WHERE IndexField=1
а к оптимизатору и sql`еписателю


 
Тимохов   (2008-07-01 01:46) [12]

Не читая пред. авторов скажу словами, которыми я обычно пытаюсь объяснить кому-то силу алгоритмов.

Вот представь, автор, что у тебя есть список из 8 элементов. Допустим ты ничего не знаешь про эти элементы. Тебе нужно найти элемент А. Что ты будешь делать? Видимо перебирать 8 элементов в поисках желаемого. Так? Итого в среднем ты потратишь 4 стравнения для поиска желаемого (т.е. 8 / 2 = 4).

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

И вот приходит к тебе злой запрос. Найди, нафиг, мне элемент А! Шо делать? Может опять перебирать все 8 элементов и потратить те же 4 в среднем шагов на поиск? Ну уж нет.

Делаем так!
1. Берем у искомого А есть метрику.
2. Берем у диапазона тех самых восьми элементов минимум и максимум их метрик.
3. Берем среднее между минимумом и максимумом из метрик из п. 2.
4. Сравниваем п. 1 и п. 3. Если п. 1 больше п. 3, то ничинаем искать уже среди 5..8 элементов.

Если хорошо подумать (я надеюсь, что это допустимо предполагать в данном случае),то можно понять, что элемент будет найден за 3 сравнения. Что есть явно меньше, нежели 4 при тотальном сравнении.

Вот теперь предположите, что элементов не 8, а 1024. В итоге вы получите,что найти элеменент можно за 10 сравнений, нежели за 512.

А если элементов 2^2323232323. Какова будет разница?

Решение в студию!

ЗЫ. Если рассмотреть педагогический эффект моего поста, то его можно охарактеризовать так: ничего не бывате задарма, но бывате, что накладные расходы покрывают убытки. Надо только думать...


 
McSimm ©   (2008-07-01 01:50) [13]


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

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


> когда замедляется именно выборка из-за наличия индексов.

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


 
Тимохов   (2008-07-01 01:59) [14]

можно скажу для продвинутых в индексах?

индексы и вообще запросы в КОНКРЕНТОЙ СУБД штука очень тонкая.

Нужно обазательно анализировать планы запросов (ведь эта скотина, СУБД, считает нас всех идиотами и решает что с чем ей сливать сама).

Нужно очень внимательно относиться к связаке БИЗНЕ-ЛОГИКА х ИНДЕКСЫ.

Вот история оптимизации (здесь без знания предметки никуда):
1. У нас в БД есть детайл таблица с элементами: ТИП, НОМЕР, ДАТА.
2. Частно нужно эти три признака вытигавать.
3. БД - MSSQL.
4. Вот поставь себя на место СУБД - есть 2 таблицы: Мастер-таблица, и детаил таблица. Причем на ТИП, НОМЕР и ДАТА могут быть условия. Вот хрен поймешь как сливать данные!
5. И вот я вижу, что эта ... хорошая СУБД... сливать начинает с ДАТЫ!!! Блин ну дней всего в году 365, а документов 7017409147 (не меньше!).
6. А вот типов документов всего 234.
7. И тут я (Тимохов Д.) меня запрос так, чтобы эта ... хорошая СУБД... сначала отсексла нужный мне набор документов по типу, а ужо потом колупалась среди них в их номерах и датаж.

В итоге оптимизация 30 процентов. А если еще покопаться? Можно и еще нарыть...


 
Petr V. Abramov ©   (2008-07-01 02:32) [15]


> 7. И тут я (Тимохов Д.)
> нужный мне набор документов по типу,
> 6. А вот типов документов всего 234.

наифиговейший запрос, на любой СУБД
> В итоге оптимизация 30 процентов.
либо документов мало, либо кластер-фактор (документы одного типа инсертиттся подряд)


 
Petr V. Abramov ©   (2008-07-01 02:34) [16]


> Тимохов   (01.07.08 01:59) [14]

с другой стороны, если документов до лимона - сработает :)


 
Petr V. Abramov ©   (2008-07-01 02:41) [17]

> 7017409147
> Тимохов  
соврал  или цифра лишняя где-то :)


 
sniknik ©   (2008-07-01 08:27) [18]

> Это только Access является таким счастливым исключением ?
просто оптимизатор аксесса легче всего "обмануть" потому и проверки на нем более "чистые" когда он не вмешивается, а "физика процессов" везде одинаковая -> добавили лишнее действие = добавили времени исполнения.

другие еще надо проверить, возможно будет то же самое. кому интересно может заняться.


 
Anatoly Podgoretsky ©   (2008-07-01 09:29) [19]

> Игорь Шевченко  (01.07.2008 0:43:09)  [9]

Это относится к любым базам, но нужны определенные условия, не всегда эксперимент повторяется.


 
Ega23 ©   (2008-07-01 10:26) [20]

С индексами было ещё что-то, где плюнули на стол.



Страницы: 1 вся ветка

Текущий архив: 2008.08.17;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.028 c
2-1216112761
Newss
2008-07-15 13:06
2008.08.17
Создание таблицы в word


2-1216187859
savyhinst
2008-07-16 09:57
2008.08.17
Как инвертировать цвета TBitmap?


1-1196520892
NikolayV
2007-12-01 17:54
2008.08.17
Вопрос по ThemeServices


4-1194777304
Niki
2007-11-11 13:35
2008.08.17
Процессы


10-1148977688
Ilana Axelrod
2006-05-30 12:28
2008.08.17
COM