2014-12-23 2 views
1

Прошло несколько лет с тех пор, как я работал с SQL и C# .NET, поэтому будьте нежны.SQL запросов базы данных занимает слишком много времени

Я прыгаю, чтобы помочь проекту, который строил сотрудник. Что-то, хотя кажется, не в порядке.

Я пытаюсь предоставить прямые отчеты по конкретной таблице в базе данных. Он имеет 9 столбцов и приблизительно 1,6 М строк в последний раз, когда я проверил. Это большой, но он достаточно большой, чтобы создавать проблемы. Однако, когда я запускаю простой запрос с использованием MS SQL Server Management Studio, он занимает 11 секунд.

SELECT * 
    FROM [4.0Analytics].[dbo].[Measurement] 
    where VIN = 'JTHBJ46G482271076'; 

Я попытался создать индекс для VIN, но это время. «Исключение произошло при выполнении инструкции Transact-SQL или партии». «Не удалось выделить пространство для объекта« X »в dabase« Ваша Datase », потому что файловая группа« PRIMARY »заполнена»

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

+1

11 секунд в норме - вам определенно нужен указатель на VIN. –

+2

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

+0

1.6M строк, я предполагаю, что только эта таблица составляет около 6.5 ГБ. Если вы используете SQL Server Express, вы должны быть на уровне 2008 г^2 или выше, размер которого ограничен 10 ГБ. Если размер жесткого диска не является проблемой, и ни одна из них не является версией SQL-сервера, я рекомендую увеличить начальный размер файловой группы на что-то большее, чем скорость авторазращения, а также размер текущего файла данных. – WickedFan

ответ

2

Как сказал Дэвид Гугг, в вашей базе данных осталось недостаточно места.

Проверьте, достаточно ли свободного места на диске, где находится основной файл. Если у вас есть достаточно свободного места на диске с помощью следующей команды, а затем попытаться создать индекс

USE [master] 
GO 

ALTER DATABASE [4.0Analytics] 
    MODIFY FILE (NAME = N'Primary_File_Name' 
       , MAXSIZE = UNLIMITED 
       , FILEGROWTH = 10% 
      ) 
GO 


-- This will allow your database to grow automatically if it runs out of space 
-- provided you have space left on the disk 
-- Now try to create the Index and it should let you create it. 

SELECT * занимает слишком много времени. Ну неудивительно, сколько индексов вы кладете на таблицу, если вы делаете SELECT *, это всегда приведет к Clustered Index Scan, если у вас есть первичный ключ, определенный в таблице, иначе сканирование таблицы.

Try `Select <Column Names>` --<-- Only the columns you actually need 
+0

Спасибо за отзыв. Это клиентский сервер, поэтому нам нужно будет их обновить. Тем временем мы попытаемся переместить данные на наш сервер, чтобы убедиться, что это будет более управляемым, пока они найдут решение. Спасибо за ответ. Я вернусь в случае необходимости! –

1
  1. я бы не рекомендовал, чтобы установить файл данных Autogruth в процентах [%], то лучше (лучшие практики), чтобы установить его роста на МБ, например:

    USE [ мастер] GO

    ALTER DATABASE [имя_базы_данных] ИЗМЕНИТЬ FILE (NAME = N'YouDataBaseFileName», FILEGROWTH = 10240KB, MAXSIZE = неограничено) GO

  2. Ошибка, возникшая при создании индекса, была связана с тем, что индекс не имел возможности расширения. (Поскольку параметр MAXSIZE установлен в значение LIMIT).

  3. чтобы проверить это, вы можете сделать: a. Обозреватель объектов >>> Базы данных >>> Щелкните правой кнопкой мыши запрошенную базу данных >>> Идите в TAB «Файл». -SQL, б: Т:

    выберите FILE_NAME (e.file_id) в виде [имя_файла], e.growth, e.max_size, e.is_percent_growth F ROM sys.master_files е , где ИМЯ_ОБЪЕКТА (е.database_id) = 'YourDatabaseName' GO