SQL Server минус MySQL Особенности

0

Я знаю MySQL и пытаюсь изучить SQL Server. Я ищу функции/ключевые слова, которые находятся в SQL Server, а не в MySQL. Например: TOP, CLUSTERED/NONCLUSTERED Индексы и т.д.

Любые ссылки/указатели оценены.

Спасибо!

  • 1
    Перейти на MSSQL. Я сыт по горло использованием MySql. Не знаю, почему это так популярно. MySql имеет несколько глупых типов движков, и у вас много ограничений в MYISAM. Таким образом, в реальном мире вы бы выбрали InnoDB. Но если вы используете InnoDB, вы ограничены функциональностью MySql. Вы не можете использовать полнотекстовый поиск и т.д., находясь в INNODB. MSSQL не имеет таких ограничений и таких глупых типов движков. Во-вторых, в MSSQL есть CTE, рейтинговые запросы, сводные запросы, о которых я не слышал в MySql. Графический интерфейс MySql очень плохой. После того, как вы используете MSSQL, вам больше не придется трогать MySql. Доверьтесь мне..
  • 2
    в MySQL есть кластерные индексы
Показать ещё 2 комментария
Теги:
sql-server

4 ответа

3
Лучший ответ

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

Итак, вот основные элементы производительности для исследования. Это наклонно к MSSQL, но не исключительно к нему:

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

  • Индексы, ограничения и базовое упорядочение таблиц и данных строк: кучи, кластеризация, некластеризованная, уникальная и неединственность этих индексов, первичные ключи, уникальные ограничения, включенные столбцы. Во всех этих индексах допустимы ли nulls, разрешено только одно значение null или none. Uniqueifiers. Индекс покрытия.

  • SARGability (смотрите SARG, который является сокращенным для "Search ARGument" ).

  • Внешние ключи, значения по умолчанию, каскадные удаления/обновления, их влияние на вставки и удаления.

  • Нужны ли NULL какое-либо место для хранения, и если на это влияет позиция столбца. Количество байтов, необходимых для хранения каждого типа данных. Когда конечные пробелы сохраняются или не сохраняются для строковых типов данных. Упакованные или не упакованные типы данных (например, float и decimal vs. integer). Концепция строк на странице (или наименьшая единица чтения диска) как в кластерных, так и в некластеризованных индексах.

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

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

  • INNER, LEFT, RIGHT, FULL и CROSS JOINs. Полу-соединения (EXISTS) и анти-полу-соединения (НЕ СУЩЕСТВУЮЩИЕ). Любой другой специфический для языка синтаксис, такой как ИСПОЛЬЗОВАНИЕ в mySql и CROSS APPLY/OUTER APPLY в SQL Server. Эффект включения условия соединения в предложение ON внешнего соединения и его включение в предложение WHERE.

  • Независимые подзапросы, коррелированные подзапросы, производные таблицы, общие выражения таблиц, понимание того, что EXISTS и NOT EXISTS, как правило, представляют собой коррелированный подзапрос, но обычно рассматриваются в плане выполнения как объединения (полу или анти-полусвязы).

  • Просмотр и понимание планов выполнения либо графически, либо в тексте. Просмотр статистики/профиля процессора, чтение, запись и длительность, используемые целыми пакетами SQL или отдельными операциями. Понимание ограничений планов выполнения и профилей, что на самом деле означает, что вы, как правило, должны использовать оба для оптимизации. Кэширование и повторное использование планов выполнения, истечение планов из кеша. Параметр sniffing и параметризация. Динамический SQL по отношению к ним.

  • Относительная стоимость преобразования типов данных в другие типы данных или просто работа с этими типами данных. (Например, твердое правило состоит в том, что работа со строками более дорогостоящая, чем работа с числами.)

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

  • Искает, сканирует, сканирует диапазон, сканирование "пропустить". Закладка ищет, как поиск индекса, за которым следует таблица, искать в той же таблице, используя значение, найденное в поиске индекса. Соединения Loop, merge и hash. Легкие и ленивые катушки. Присоединяйтесь. Оценочное количество строк. Фактическое количество строк.

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

  • Многопроцессорные возможности и преимущества и возможности параллельного выполнения.

  • Использование Tempdb или другого временного файла. Время жизни и объем временных таблиц, переменных таблицы (если у вашего DB-сервера есть такие). Независимо от того, собрана ли статистика для них (в таблицах temp SQL Server использовать статистику и переменные таблицы нет).

  • Блокировка, блокировка детализации, типы блокировок, эскалация блокировок, блоки, блокировки. Схема доступа к данным (например, UPDATE сначала, INSERT second, DELETE last). Intent, общие, эксклюзивные блокировки. Блокировать подсказки (например, в SQL Server UPDLOCK, HOLDLOCK, READPAST, TABLOCKX).

  • Транзакции и изоляция транзакций. Прочитайте прочитанные, прочитайте незафиксированные, повторяемые чтения, сериализуемые, моментальные снимки, другие, которые я не могу сейчас запомнить.

  • Файлы данных, группы файлов, отдельные диски, журналы транзакций, простое восстановление, полное восстановление, старейшая открытая транзакция или минимальный номер последовательности журналов (LSN), рост файлов.

  • Последовательности, массивы, списки, столбцы идентификации, функции окон, TOP/rownum/ограничение числа возвращенных строк.

  • Материализованные представления, а также индексированные представления. Вычисляемые столбцы.

  • от 1 до 1, от 1 до 0 или от 1 до 1, от многих, от многих до многих.

  • UNION, UNION ALL и другие "вертикальные" соединения. SQL Server также имеет EXCEPT и INTERSECT.

  • Расширение списков IN() для OR. Расширение IsNull(), Coalesce() или других механизмов обработки NULL для операторов CASE.

  • Ловушки использования DISTINCT для "исправления" запроса вместо решения основной проблемы.

  • Как подключенные серверы НЕ делают соединения по ссылке хорошо, запросы на связанный сервер часто становятся по очереди, большие объемы данных можно потянуть по ссылке, чтобы выполнить соединение локально, даже если это не Это разумно.

  • Ловушка выполнения любых операций ввода-вывода или ошибок в триггере. Объем триггеров (независимо от того, стреляют ли они для каждой строки или один раз для каждой операции с данными).

  • Создание внешнего интерфейса, графического интерфейса пользователя, средства отчетности или другого клиента делает работу типа клиента (например, даты форматирования или числа как строки) вместо механизма БД.

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

1

NewID() - тоже одно ключевое слово, но я думаю, что ключевые слова - это не единственное, что вам нужно искать. Определение хранимых процедур также имеет различия. Безопасность отличается (пользователь dbo, использование групп Windows/пользователей в MSSQL), создание сетей, и я согласен с ответами на zerkms, что поведение и методы разные.

1

Это не лучший способ изучить новую СУБД. Разница заключается не только в диалоговом окне sql, но и в том, как работает СУБД, о ее поведении, практиках и т.д. Каждая новая СУБД должна быть изучена вами как ваша первая.

  • 0
    Существует разница в изучении SQL и БД. Я знаю sql и хотел знать, что еще предлагает MSSQL
  • 0
    (базовая) совместимость с ANSI SQL 92 ничего не значит. опыт работы с некоторыми СУБД может быть плохим подспорьем при работе с другой СУБД, просто потому что «одни и те же» вещи там абсолютно неэффективны. прочитайте T.Kyte, чтобы получить больше деталей.
-2
delete from tableA where columnA in(
select columnA from (
select a.*, row_number() over (order by columnA) rn
from tableA a)
where rn>100)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню