SQL - Temp Таблица: Сохранение всех столбцов в таблице темпа по сравнению с только первичным ключом

голоса
2

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

Мне интересно, какие из следующих лучший подход:

1) Выбрать все столбцы моей первичной таблицы в таблицу Temp, а затем быть в состоянии выбрать строки, мне нужно будет

ИЛИ

2) Выберите только первичный ключ главной таблицы в таблицу Temp, а затем соединение с первичной таблицей позже?

Есть ли рассмотрение размера при работе с подходом 1 по сравнению с подходом 2?

[РЕДАКТИРОВАТЬ]

Я спрашиваю, потому что я бы сделал первый подход, но глядя на МЕТОДИКИ [DBO]. [Aspnet_Membership_FindUsersByName], который был включен в ASP.NET членства, они делают подход 2

[EDIT2]

С людьми, не имеющих доступа к хранимой процедуре:

  -- Insert into our temp table
INSERT IGNORE  INTO #PageIndexForUsers (UserId)
    SELECT u.UserId
    FROM   dbo.aspnet_Users u, dbo.aspnet_Membership m
    WHERE  u.ApplicationId = @ApplicationId AND m.UserId = u.UserId AND u.LoweredUserName LIKE LOWER(@UserNameToMatch)
    ORDER BY u.UserName


SELECT  u.UserName, m.Email, m.PasswordQuestion, m.Comment, m.IsApproved,
        m.CreateDate,
        m.LastLoginDate,
        u.LastActivityDate,
        m.LastPasswordChangedDate,
        u.UserId, m.IsLockedOut,
        m.LastLockoutDate
FROM   dbo.aspnet_Membership m, dbo.aspnet_Users u, #PageIndexForUsers p
WHERE  u.UserId = p.UserId AND u.UserId = m.UserId AND
       p.IndexId >= @PageLowerBound AND p.IndexId <= @PageUpperBound
ORDER BY u.UserName
Задан 09/12/2008 в 16:01
источник пользователем
На других языках...                            


5 ответов

голоса
2

A Таблица Variable будет предпочтительнее, чем временная таблица, если его в ваших ограничениях.

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

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

Можете ли вы объяснить, как вы «подкачка» с временными таблицами? Его не метод подкачки я знаком с.

EDIT: После глядя на ваш пост редактирования, вы должны определенно использовать переменную таблицы в этом случае. Его меньше очистки и вы не задуть TempDB так много.

Кроме того, его вид неясно, какая польза этого временного стола дает. Если ваша цель состоит в том, чтобы остановить доступ пользователя объект / applicaiton, то почему Вы добавляете часть про то, что «только ограничено, если на данной странице в таблице данных». Кажется, вид отверстия-у с точки зрения безопасности.

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

Ответил 09/12/2008 в 16:15
источник пользователем

голоса
1

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

Ответил 09/12/2008 в 16:04
источник пользователем

голоса
0

Альтернативой пейджинга (путь моя компания делает это) является использование CTE-х.

Проверьте этот пример из http://softscenario.blogspot.com/2007/11/sql-2005-server-side-paging-using-cte.html

CREATE PROC GetPagedEmployees (@NumbersOnPage INT=25,@PageNumb INT = 1)
AS BEGIN

WITH AllEmployees AS
(SELECT ROW_NUMBER() OVER (Order by [Person].[Contact].[LastName]) AS RowID,
[FirstName],[MiddleName],[LastName],[EmailAddress] FROM [Person].[Contact])

SELECT [FirstName],[MiddleName],[LastName],[EmailAddress]
FROM AllEmployees WHERE RowID BETWEEN
((@PageNumb - 1) * @NumbersOnPage) + 1 AND @PageNumb * NumbersOnPage
ORDER BY RowID
Ответил 09/07/2009 в 09:40
источник пользователем

голоса
0

Подумайте об этом таким образом. Предположим, что ваш запрос будет возвращать достаточно записей, чтобы заполнить 1000 страниц. Сколько пользователей вы думаете, что на самом деле смотреть на всех этих страницах? Возвращая только идентификаторы, вы не возвращаете много информации вы можете или не может понадобиться, чтобы увидеть. Поэтому следует экономить на сетевых и серверных ресурсов. И если они действительно идут через много страниц, то потребуется достаточно времени, что детали данных может действительно нужно быть обновлены.

Ответил 09/12/2008 в 21:49
источник пользователем

голоса
0

Это именно тот подход, который я использую для пейджинга на сервере,

Создание таблицы с переменной (почему берут на себя накладные расходы на ведение журналов транзакций?) Только с ключевыми значениями. (Создать таблицу со столбцом autonum Удостоверение Первичный ключ -. Это будет RowNum)

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

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

Where RowNum Between ((PageNumber-1) * PageSize) + 1 And PageNumber * PageSize
Ответил 09/12/2008 в 16:43
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more