Тот же запрос использует различные индексы?

Чтобы избежать повторного ввода (повлиять на производительность) prefix, используйте TextUtils.isEmpty:

            String prefix = "";
            for (String item : list) {
                sb.append(prefix);
                if (TextUtils.isEmpty(prefix))
                    prefix = ",";
                sb.append(item);
            }
5
задан Ian Elliott 14 July 2009 в 02:01
поделиться

3 ответа

Regex.Replace () намного дороже, чем метод String.Replace (). Используйте String.Replace (), когда это возможно, и используйте Regex, когда это необходимо.

Взгляните на этот тест , чтобы увидеть разницу во времени.

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

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

Статистика, на которой основаны эти суждения, также может сильно различаться; SQL Server по умолчанию отбирает только небольшой процент всех значимых строк таблицы, поэтому селективность этого индекса может не быть репрезентативной для всего. Это особенно проблематично, если в индексе есть сильно неуникальные ключи.

В данном конкретном случае I ' м. угадать ваш индекс typeenvoi в высшей степени неуникальный. Таким образом, собранная статистика, вероятно, указывает оптимизатору, что одно из значений встречается реже, чем другое, и вероятность того, что этот индекс будет выбран, увеличивается.

9
ответ дан 18 December 2019 в 12:00
поделиться

The query optimiser in SQL Server (as in most modern DBMS platforms) uses a methodology known as 'cost based optimisation.' In order to do this it uses statistics about the tables in the database to estimate the amount of I/O needed. The optimiser will consider a number of semantically equivalent query plans that it generates by transforming a basic query plan generated by parsing the statement.

Each plan is evaluated for cost by a heuristic based on the statistics maintained about the tables. The statistics come in various flavours:

  • Table and index row counts

  • Distributions histograms of the values in individual columns.

If the ocurrence of 'MAIL' vs. 'EXPORT' in the distribution histograms is significantly different the query optimiser can come up with different optimal plans. This is probably what happened.

4
ответ дан 18 December 2019 в 12:00
поделиться

Вероятно, это связано с "мощностью", я полагаю, это слово имеет значение в таблице. Если этому предложению соответствует намного больше строк, SQL Server может решить, что один запрос будет более эффективным с использованием индекса для другого столбца. Это крайний случай, но если бы одна строка соответствовала «MAIL», она, скорее всего, использовала бы этот индекс. Если бы каждая вторая строка в таблице была «EXPORT», но только половина из этих строк «EXPORT» имела etat , равное 0, то, вероятно, использовался бы индекс этого столбца.

2
ответ дан 18 December 2019 в 12:00
поделиться
Другие вопросы по тегам:

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