Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2008:Подреждането по дата и час е твърде бавно

Подреждане по id вероятно използва сканиране на клъстерен индекс, докато подрежда по datetime използва сортиране или търсене в индекс.

И двата метода са по-бавни от сканирането на клъстерен индекс.

Ако вашата таблица е групирана по id , основно това означава, че вече е сортиран. Записите се съдържат в B+Tree който има свързан списък, свързващ страниците в id поръчка. Машината трябва просто да премине през свързания списък, за да получи записите, подредени по id .

Ако id са били вмъкнати в последователен ред, това означава, че физическият ред на редовете ще съответства на логическия ред и сканирането на клъстерния индекс ще бъде още по-бързо.

Ако искате вашите записи да бъдат подредени по datetime , има две опции:

  • Вземете всички записи от таблицата и ги сортирайте. Бавността е очевидна.
  • Използвайте индекса на datetime . Индексът се съхранява в отделно пространство на диска, което означава, че машината трябва да се движи между страниците на индекса и страниците на таблицата във вложен цикъл. Освен това е по-бавно.

За да подобрите подреждането, можете да създадете отделен покриващ индекс на datetime :

CREATE INDEX ix_mytable_datetime ON mytable (datetime) INCLUDE (field1, field2, …)

и включете всички колони, които използвате в заявката си, в този индекс.

Този индекс е като скрито копие на вашата таблица, но с данни, сортирани в различен ред.

Това ще позволи да се отървете от ключовите търсения (тъй като индексът съдържа всички данни), което ще направи подреждане по datetime толкова бързо, колкото това на id .

Актуализация:

Нова публикация в блог за този проблем:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е причината контекстът на транзакция да се използва от друга сесия

  2. EXP() Примери в SQL Server

  3. Sql Server 2008:Странна грешка в съхранена процедура

  4. Групиране и сумиране на данни от редове в колони в MS-SQL?

  5. Как да разрешим „невалидно име на обект“ в SQL Server?