ahmed_sa Ответов: 2

Как быстро обрабатывать доступ к таблице, если она содержит огромное количество данных ?


Проблема

Я работаю на SQL server 2012 у меня есть таблица с 300 сотнями миллионов строк

когда выбираешь из таблицы какие-то записи, это слишком тяжело

Мне нужен любой способ повысить производительность таблицы по крайней мере если я выберу небольшой объем данных в виде 1000 строк

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

так что если есть какие-то идеи, которые я могу принять, чтобы быстро получить доступ к этой таблице

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

так как же это сделать, пожалуйста ?

Что я уже пробовал:

CREATE TABLE [Parts].[Nop_Part](
	[PartID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
	[PartNumber] [nvarchar](70) NOT NULL,
	[PartNumberNon] [nvarchar](60) NOT NULL,
	[CompanyID] [int] NOT NULL,
	[Active] [bit] NOT NULL,
	[Deleted] [bit] NOT NULL,
	[PartsFamilyID] [int] NOT NULL,
	[PackageID] [int] NULL,
	[PinOutId] [int] NOT NULL,
	[GroupID] [bigint] NULL,
	[Equation] [varchar](500) NULL,
	[Masked_ID] [int] NULL,
	[CreatedDate] [datetime] NULL,
	[CreatedBy] [int] NULL,
	[ModifiedDate] [datetime] NULL,
	[Modifiedby] [int] NULL,
	[DeletedDate] [datetime] NULL,
	[DeletedBy] [int] NULL,
	[LatestCompanyID] [bigint] NOT NULL,
	[DateOfLatestCompanyID] [datetime] NULL,
 CONSTRAINT [PK_Nop_Part] PRIMARY KEY CLUSTERED 
(
	[PartID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [UC_Partnon_LatestCompanyID] UNIQUE NONCLUSTERED 
(
	[PartNumberNon] ASC,
	[LatestCompanyID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [uc_partnumbernonCompany] UNIQUE NONCLUSTERED 
(
	[PartNumberNon] ASC,
	[CompanyID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [Parts].[Nop_Part] ADD  CONSTRAINT [DF_Nop_Part_PinOutId]  DEFAULT ((0)) FOR [PinOutId]
GO

ALTER TABLE [Parts].[Nop_Part] ADD  DEFAULT (getdate()) FOR [DateOfLatestCompanyID]
GO

ALTER TABLE [Parts].[Nop_Part]  WITH NOCHECK ADD FOREIGN KEY([Masked_ID])
REFERENCES [dbo].[Core_Masked] ([ID])
GO

F-ES Sitecore

Нет никакого ответа "волшебной пули". Определите, что вы запрашиваете медленно (то есть то, что находится в ваших аргументах WHERE), и постройте индекс на этих полях. Обратите внимание, что индексы могут ускорить запрос, но замедлят вставку. Google для настройки sql - запросов, чтобы получить идеи, это огромная тема.

ahmed_sa

Спасибо за ответ я прошу здесь только для того чтобы дать мне некоторое представление о том что я делаю только и дать мне публичные причины для этого

Richard MacCutchan

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

Patrice T

Определение "слишком долго"

Richard Deeming

"300 сотен миллионов строк"

Вы в этом уверены? Это было бы 30 миллиард строки.

2 Ответов

Рейтинг:
1

phil.o

Возможно, вас заинтересует подкачка страниц; это позволяет извлекать только нумерованное подмножество строк.
Подкачка запроса с помощью SQL Server - статьи TechNet - США (английский) - TechNet Wiki[^]

Вы также можете воспользоваться преимуществами WHERE предложение для фильтрации результатов в соответствии с вашими данными.
фильтрация sql[^]

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

Наконец, когда дело доходит до производительности, есть инструмент, который позволяет вам получить некоторое представление о таймингах в запросах:
план выполнения sql[^]
А вот несколько ссылок о производительности SQL и его управлении: производительность sql[^]


Рейтинг:
1

MarcusCole6833

если таблица должна была храниться без индексации или сохраняться как есть для деловых целей.

Одним из решений является использование представлений с индексом для определенных выборок.

Создание индексированных представлений - SQL Server | Microsoft Docs[^]


Другой - создание таблицы истории, данных и бизнес-логики, позволяющей.

Создание системы контроля версий временные таблицы SQL-сервера Майкрософт документы[^]