Вопросы с тегом «database-internals»

По техническим вопросам о внутренней работе движка базы данных.

2
Почему временная таблица является более эффективным решением проблемы Хэллоуина, чем энергичная шпуля?
Рассмотрим следующий запрос, который вставляет строки из исходной таблицы, только если их еще нет в целевой таблице: INSERT INTO dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR WITH (TABLOCK) SELECT maybe_new_rows.ID FROM dbo.A_HEAP_OF_MOSTLY_NEW_ROWS maybe_new_rows WHERE NOT EXISTS ( SELECT 1 FROM dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR halloween WHERE maybe_new_rows.ID = halloween.ID ) OPTION (MAXDOP 1, QUERYTRACEON 7470); Одна возможная форма плана …

4
Индекс уникальности накладных расходов
В моем офисе ведутся постоянные дебаты о стоимости индекса, а также о том, является ли уникальность выгодной или дорогой (вероятно, и то и другое). Суть проблемы - наши конкурирующие ресурсы. Фон Ранее я читал обсуждение, в котором говорилось, что Uniqueиндекс не требует дополнительных затрат на поддержание, поскольку Insertоперация неявно проверяет, …

2
В поисках инсайдерской информации FILESTREAM
Когда функция FILESTREAM активирована в Microsoft SQL Server 2012, SQL Server создаст «скрытый» общий ресурс в системе. Доля определяется следующим образом: Sharename FILESTREAM_SHARE Path \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE Remark SQL Server FILESTREAM share Maximum users unlimited Users Caching Manual caching of documents Permissions NT-AUTHORITY\Authenticated Users, FULL Имя - это имя общего ресурса, который …

2
Почему MySQL позволяет HAVING использовать псевдонимы SELECT?
Насколько мне известно, в SQL логический порядок обработки запросов, который является концептуальным порядком интерпретации, начинается с FROM следующим образом: ИЗ ГДЕ ГРУППА ПО HAVING ВЫБРАТЬ СОРТИРОВАТЬ ПО Из этого списка легко понять, почему в предложении WHERE нельзя использовать псевдонимы SELECT, поскольку псевдоним еще не создан. T-SQL (SQL Server) строго следует …

1
как имитировать состояние нехватки памяти при выполнении запроса
Я пытаюсь лучше понять, как механизм выполнения SQL Server ведет себя в состоянии нехватки памяти. Говоря о предоставлении памяти, мне интересно, есть ли какой-то способ заставить GrantedMemoryего быть равным RequiredMemory. (Я предполагаю, что есть недокументированный флаг трассировки, который сделает это. Кто-нибудь знает, что это такое?)

1
Что позволяет SQL Server обменивать имя объекта на строку, переданную системной процедуре
Что делает законным передачу имени объекта системной хранимой процедуре sp_helptext? Какой механизм преобразует имя объекта в строку? например -- works sp_helptext myproc sp_helptext [myproc] sp_helptext [dbo.myproc] -- and behaves the same as a string sp_helptext 'myproc' sp_helptext 'dbo.myproc' -- does not work sp_helptext dbo.myproc -- Msg 102, Level 15, State …

2
Чем эти два отката SQL Server отличаются?
В SQL Server 2008 R2 чем отличаются эти два отката: Выполните ALTERоператор в течение нескольких минут, а затем нажмите «Отменить выполнение». Для полного отката требуется несколько минут. Выполните ту же ALTERинструкцию, но убедитесь, что LDFфайл недостаточно велик для успешного завершения. Как только LDFпредел достигнут, и «автоматический рост» не разрешен, выполнение …

1
Массив слотов и общий размер страницы
Я продолжаю читать на многих форумах и во многих блогах, что страница состоит из страницы, показанной ниже: Размер страницы: 16 x 512B = 8192B Заголовок страницы: = 96B Максимальная строка In_Row: = 8060B Это оставляет (8192 - 96 - 8060) B = 36B. Хорошо, это логично и правильно. У меня …

1
Почему эти похожие запросы используют разные фазы оптимизации (обработка транзакций и быстрый план)?
Пример кода в этом элементе подключения Показывает ошибку где SELECT COUNT(*) FROM dbo.my_splitter_1('2') L1 INNER JOIN dbo.my_splitter_1('') L2 ON L1.csv_item = L2.csv_item Возвращает правильные результаты. Но следующее возвращает неверные результаты (в 2014 году с использованием нового Оценщика мощности) SELECT (SELECT COUNT(*) FROM dbo.my_splitter_1('2') L1 INNER JOIN dbo.my_splitter_1('') L2 ON L1.csv_item …

1
Зачем нужен этот агрегат потока?
Проверьте этот запрос. Это довольно просто (см. В конце поста определения таблиц и индексов, а также скрипт repro): SELECT MAX(Revision) FROM dbo.TheOneders WHERE Id = 1 AND 1 = (SELECT 1); Примечание: «AND 1 = (SELECT 1) просто для того, чтобы этот запрос не был автоматически параметризован, что, как мне …

1
Где SQL Server физически хранит значение IDENTITY для таблицы?
Я надеюсь, что кто-то может указать мне правильное направление на этот. Вот мои разработки до сих пор. SELECT * FROM sys.identity_columnsэто системное представление, которое дает «last_value», но определение для этого представления использует внутреннюю функцию IdentityProperty(colName, 'LastValue')- так что это тупик (не вытаскивая его из системной таблицы). Везде (я смотрел) в …

3
Физическая операция конкатенации: гарантирует ли она порядок выполнения?
В стандартном SQL результат a union allне гарантируется в любом порядке. Итак, что-то вроде: select 'A' as c union all select 'B' Может вернуть две строки в любом порядке (хотя на практике в любой известной мне базе данных «A» будет стоять перед «B»). В SQL Server это превращается в план …

1
Перечислите страницы ROW_OVERFLOW_DATA для конкретной таблицы
Я пытаюсь получить список страниц для таблицы, в которой есть строки с ROW_OVERFLOW_DATA. Я могу получить список выделенных страниц из недокументированного DMV, sys.db_db_database_page_allocationsоднако, похоже, что в выходных данных этого DMV нет страниц ROW_OVERFLOW_DATA. Есть ли другой DMV, который я просто не могу найти? Минимальный, полный и (надеюсь!) Проверяемый пример: USE …

2
База данных для эффективного диапазона совокупных запросов?
В качестве упрощенного примера, предположим, у меня есть такая таблица: seq | value ----+------ 102 | 11954 211 | 43292 278 | 19222 499 | 3843 Таблица может содержать сотни миллионов записей, и мне нужно часто делать такие запросы: SELECT sum(value) WHERE seq > $a and seq < $b Даже …

2
Почему объединение вложенных циклов поддерживает только левое соединение?
В блоге Крейга Фридмана « Объединение вложенных циклов» он объясняет, почему объединение вложенных циклов не может поддерживать правильное внешнее объединение: Проблема в том, что мы сканируем внутреннюю таблицу несколько раз - по одному разу для каждой строки внешнего соединения. Мы можем встречаться с одними и теми же внутренними строками несколько …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.