Индексы впитывают SQL?

Вы можете просто добавить следующий jquery.

jQuery(document).ready(function(){
    var str = jQuery(".demo-text").text();

  var res = replaceAll(str,'Mike','');

    jQuery(".demo-text").text(res);
});


function replaceAll(str, find, replace) {
    return str.replace(new RegExp(find, 'g'), replace);
}

Вот рабочая демонстрация: https://jsfiddle.net/manektech/37p5y2jk/5/

5
задан Mr. Flibble 3 March 2010 в 16:29
поделиться

9 ответов

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

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

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

YMMV.

7
ответ дан 18 December 2019 в 06:23
поделиться

Это не индексы, которые высосут. Это помещает индексы на неправильные столбцы, которые высосут.

Серьезно, хотя, почему Вам была бы нужна таблица с отдельным столбцом? Что было бы значение тех данных быть? Какой цели это служило бы?

И 20 таблиц? Я предполагаю, что Вы читаете на проектировании баз данных сначала или иначе объясняете нам контекст своего вопроса.

7
ответ дан 18 December 2019 в 06:23
поделиться

Скажите, что у меня есть таблица с большим количеством строк и один столбец, который я хочу индексировать, может иметь одно из 20 значений. Если бы я должен был поместить индекс на столбец, то это было бы большим?

Индексный размер будет пропорционален количеству Ваших строк и длине индексируемых значений.

Индекс сохраняет не только индексируемое значение, но также и некоторый указатель на строку (ROWID в Oracle, LCID в PostgreSQL, первичный ключ в InnoDB и т.д.).

Если Вы имеете 10,000 строки и 1 отличное значение, Вы будете все еще иметь 10,000 записи в Вашем индексе.

Если так, почему? Если бы я должен был разделить данные в данные в 20 таблиц, один для каждого значения столбца, то индексный размер был бы тривиален, но эффект индексации был бы тем же

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

Эта техника иногда используется на самом деле в таких названных разделенных индексах. Это имеет свои преимущества и недостатки.

2
ответ дан 18 December 2019 в 06:23
поделиться

Стандартные индексы B-дерева подходят лучше всего для довольно выборочных индексов, которыми не был бы этот пример. Вы не говорите, что DBMS Вы используете; Oracle имеет другой тип индекса, названного растровым индексом, который больше подходит для индексов низкой селективности в средах OLAP (так как эти индексы являются дорогими для поддержания, делая их неподходящими для сред OLTP).

Оптимизатор решит основания статистику, думает ли это, что индекс поможет получить данные в самое быстрое время; если это не будет, optmiser не использовать его.

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

2
ответ дан 18 December 2019 в 06:23
поделиться

Короткий ответ: Сделайте индексы сосут: Да и Нет

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

Хорошие начальные точки: http://www.sqlservercentral.com/articles/Indexing/

3
ответ дан 18 December 2019 в 06:23
поделиться

Извините, я не совсем уверен, под чем Вы подразумеваете "большой".

  • Если Ваш индекс будет кластеризироваться, то все данные для каждой записи будут на той же листовой странице, таким образом, создавая самый эффективный индекс, доступный Вашей таблице, пока Вы пишете свои запросы против него правильно.

  • Если Ваш индекс будет не кластеризироваться, то только связанные с индексом данные будут на Ваших листовых страницах. Затем в зависимости от suchs вещей как, сколько других индексов Вы имеете, вместе с деталями как Ваш коэффициент заполнения, Ваш индекс может или не может быть эффективным. В целом, если у Вас нет тонны индексов на Вашей таблице, необходимо быть в безопасности.

  • Эффективность Вашего индекса будет также определена по условию тип 20 значений, которые Вы говорите о входе в столбец. Если они предопределены значения, то их детали должны, вероятно, быть в справочной таблице с простым типом данных первичного ключа (как Интервал/Число). Затем добавьте что столбец к своей таблице как внешний ключ с индексом на столбце.

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

1
ответ дан 18 December 2019 в 06:23
поделиться

Индексы просто для производительности. Если индекс не повышает производительность для запросов, Вы интересуетесь, то это сосет.

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

0
ответ дан 18 December 2019 в 06:23
поделиться

Это было бы достаточно большим для содержания тех значений для всех строк в отсортированном порядке.

Скажите, что у Вас есть 20 различных строк 4 символов и 1 миллиона строк, это, по крайней мере, были бы 4 миллиона байтов (или 8, если 16-разрядный unicode) для содержания тех значений.

0
ответ дан 18 December 2019 в 06:23
поделиться

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

Первое: Схема / дизайн
Зачем вам создавать таблицу только с одним столбцом? Это, вероятно, заходит слишком далеко в нормализации.Дизайн базы данных - одна из наиболее важных вещей, которые необходимо учитывать при оптимизации производительности

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

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

Определите первичный ключ вашей таблицы, SQL автоматически разместит кластеризованный индекс в этом столбце (столбцах). Кластерные индексы работают очень хорошо. Кроме того, вы можете размещать некластеризованные индексы в столбцах, которые часто используются в операторах SELECT, JOIN, WHERE, GROUP BY и ORDER BY. Помните, что индексы имеют определенное перекрытие, старайтесь никогда не включать кластерный индекс в некластеризованный индекс.

Также интересным может быть коэффициент заполнения индексов. Хотите ли вы оптимизировать свою таблицу для чтения (высокий коэффициент заполнения - меньше хранилища, меньше ввода-вывода) или для записи (низкий коэффициент заполнения больше хранилища, меньше перестроения страниц базы данных).

Третье: Разделение
Одна из причин использования разделения - это оптимизация доступа к данным. Допустим, у вас есть 1 миллион записей, из которых 500 000 записей больше не актуальны, но хранятся для целей архивирования.В этом случае вы можете решить разделить таблицу и сохранить 500 000 старых записей в медленном хранилище, а остальные 500 000 записей в быстром хранилище.

Измерять - значит знать
Лучший способ понять, что происходит, - это измерить, что происходит с вашим процессором и io. Сервер Microsoft SQL имеет некоторые инструменты, такие как профилировщик и планы выполнения в Management Studio, которые сообщают вам продолжительность вашего запроса, количество операций чтения / записи и использование процессора. Также план выполнения сообщит вам, какие индексы или IF-индексы используются. К вашему удивлению, вы можете увидеть сканирование таблицы, хотя вы этого не ожидали.

3
ответ дан 18 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: