Какие универсальные методы могут быть применены для оптимизации SQL-запросов?

Я бы использовал linq. Преобразуйте строку в массив с разделителями.

Настройте словарь, содержащий первый элемент ... не уверен, хотите ли вы это сделать. Если нет, просто удалите выражения «d1» и «union».

Запустите Linq, чтобы создать словарь на основе четных чисел.

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

string str = "File_name,cost_per_page,0.23,color_code,343,thickness,0.01";
string[] array = str.Split(',');

Dictionary<string, string> d1 = new Dictionary<string, string>()
{
    { array[0], "" }
};
Dictionary<string, string> d2 = array.Select((i, index) => (index > 0 && index % 2 == 0) ?
    new { key = array[index - 1], value = i } : null).Where(i => i != null).ToDictionary(d => d.key, d => d.value);

Dictionary<string, string> result = d1.Union(d2).ToDictionary(k => k.Key, v => v.Value);

foreach (KeyValuePair<string, string> kvp in result)
    Console.WriteLine(kvp.Key + ": " + kvp.Value);

return;

другой, и, возможно, более чистый подход:

Это также учитывает имя_файла. Если вы не хотите этого, добавьте «index> 0» к условному оператору, где он проверяет четность.

string str = "File_name,cost_per_page,0.23,color_code,343,thickness,0.01";
string[] array = str.Split(',');

Dictionary<string, string> d2 = array.Select((i, index) => (index % 2 == 0) ?
    new 
    {
        key = (index == 0) ? i : array[index - 1],
        value = (index == 0) ? "" : i
    } : null).Where(i => i != null).ToDictionary(d => d.key, d => d.value);

foreach (KeyValuePair<string, string> kvp in d2)
    Console.WriteLine(kvp.Key + ": " + kvp.Value);
13
задан Niyaz 2 September 2008 в 11:59
поделиться

10 ответов

  • первичные ключи Использования
  • Избегают, чтобы выбор *
  • Был так конкретен, как Вы можете при создании условных операторов
  • , Денормализация может часто быть более эффективна
  • , Табличные переменные и временные таблицы (где доступный) часто будут лучше, чем использование большой исходной таблицы
  • , Разделенные представления
  • Используют индексы и ограничения
18
ответ дан 1 December 2019 в 20:13
поделиться

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

Как в стороне, когда я начал учиться оптимизировать запросы, я выполнил профилировщика запроса SQL-сервера против трассировки, посмотрел на сгенерированный SQL и попытался выяснить, почему это было улучшением. Профилировщик запроса совсем не оптимален, но это - достойный запуск.

3
ответ дан 1 December 2019 в 20:13
поделиться

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

  • Индексы (не, что они слишком на самом деле, как они работают).
  • Кластерные индексы по сравнению с "кучей" выделили таблицы.
  • текст и двоичные поиски и когда они могут быть встроены.
  • Коэффициент заполнения .
  • , Как записи повторяются для, обновляют/удаляют.
  • , Когда расщепления страницы происходят и почему.
  • Статистика, и как они производят различные скорости запроса.
  • планировщик запроса, и как это работает на Вашу определенную базу данных (например, в некоторых системах "выбор *" является медленным в современном DBS MS-Sql, планировщик может обработать его).
7
ответ дан 1 December 2019 в 20:13
поделиться

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

  1. Гарантируют, чтобы у Вас просто был минимум данных. Удостоверьтесь, что Вы выбираете только столбцы, в которых Вы нуждаетесь. Уменьшите размеры поля до минимума.

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

  3. Избегает циклов (т.е. выберите курсоры), придерживайтесь операций присвоения.

  4. Реализация запрос как хранимая процедура, поскольку это предварительно компилируется и выполнится быстрее.

  5. Удостоверяются, что Вам настраивали корректные индексы. Если Ваша база данных используется главным образом для поиска, тогда рассматривают больше индексов.

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

  7. Удостоверяются, что Автоматическая Статистика установлена на на. SQL нужно это, чтобы помочь решить оптимальное выполнение. См. большое сообщение Mike Gunderloy для большего количества информации Основы Статистики в SQL Server, 2005

  8. Удостоверяется, что Ваши индексы не фрагментируются. Уменьшающая Индексная Фрагментация SQL Server

  9. Удостоверяется, что Ваши таблицы не фрагментируются. , Как Обнаружить Фрагментацию Таблицы в SQL Server 2000 и 2005
2
ответ дан 1 December 2019 в 20:13
поделиться

Я думаю с помощью SQL-запроса, анализатор был бы хорошим началом.

0
ответ дан 1 December 2019 в 20:13
поделиться

Используйте с statment для обработки фильтрации запроса. Ограничьте каждый подзапрос минимальным количеством возможных строк. тогда присоединитесь к подзапросам.

WITH
master AS
(
    SELECT SSN, FIRST_NAME, LAST_NAME
    FROM MASTER_SSN
    WHERE STATE = 'PA' AND
          GENDER = 'M'
),
taxReturns AS
(
    SELECT SSN, RETURN_ID, GROSS_PAY
    FROM MASTER_RETURNS
    WHERE YEAR < 2003 AND
          YEAR > 2000
)
SELECT *
FROM master,
     taxReturns
WHERE master.ssn = taxReturns.ssn

подзапросы А в с оператором могут закончиться как совпадающий со встроенными представлениями или автоматически генерировали временные таблицы. Я нахожу в работе, которую я делаю, розничные данные, это приблизительно 70-80% времени, существует выигрыш в производительности.

100% времени, существует преимущество обслуживания.

1
ответ дан 1 December 2019 в 20:13
поделиться

В Oracle можно посмотреть эти , объясняет план сравнить вариации на запрос

0
ответ дан 1 December 2019 в 20:13
поделиться

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

0
ответ дан 1 December 2019 в 20:13
поделиться

Очевидная оптимизация для Запросов Select гарантирует, чтобы у Вас были индексы на столбцах, используемых для соединений или в операторах Where.

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

0
ответ дан 1 December 2019 в 20:13
поделиться
  • Индексы
  • Статистика
  • на стопке Microsoft, Настраивающий Советник по вопросам Механизма базы данных
0
ответ дан 1 December 2019 в 20:13
поделиться
Другие вопросы по тегам:

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