2010-05-06 12 views
5

Mamy tabelę historii, która przechowuje żądania i odpowiedzi usługi xml. Obecnie przechowuje je w polu XML, ale mamy problemy z wydajnością z wstawkami. Wstawiamy tylko rekordy, brak aktualizacji, wybieranie lub usuwanie. Obetnęliśmy tabelę i przebudowaliśmy indeks, bezskutecznie. Tabela ma podstawowy indeks klastrowy w polu tożsamości oraz wartość domyślną GetDate() w polu datetime. Używamy SQL 2005 Server, ale baza danych jest w trybie zgodności SQL 2000.Który wstawia szybciej, pole XML lub pole Varchar (max)?

Jeśli zmienimy typ pola z XML na VarChar (max) lub VarChar (xxx), czy przyspieszy to wstawianie? Czy jest jeszcze coś, na co powinniśmy patrzeć?

Dzięki.

+0

Nie wiedziałem nawet, że można użyć typu danych XML w bazie danych w trybie zgodności SQL Server 2000? – Tomalak

Odpowiedz

3

varchar jest szybszy - nie trzeba parsować. Typ danych XML wykonuje dość ciężkie wewnętrzne podnoszenie.

+1

Z drugiej strony, przechowywanie dokumentu XML w kolumnie XML daje mniej miejsca - XML ​​jest zoptymalizowany do przechowywania. –

+1

Co jednak nie było pytaniem;) – TomTom

6

To zależy od problemu z wydajnością.

  • Jeśli jest związany z procesorem, to walidacja XML może być czynnikiem, a varchar (max) może być szybszy.
  • Jeśli jest powiązany z IO, wówczas skompresowana pamięć XML jest lepsza niż format nvarchar (max) i tracisz wydajność. Z drugiej strony, jeśli problematyczne fragmenty XML są małe, to varcharowa pamięć stwarza okazję do przechowywania w wierszu i może obstawiać lepiej niż XML
  • W jeszcze jednej ręce pamięć w wierszu zmniejszyłaby liczbę stron liści gęstość i powodować problemy z wydajnością odczytu.
  • Jeśli problem nie dotyczy ani procesora, ani IO, ale jest rywalizacja o blokadę, problem XML vs. varchar jest ortogonalny w stosunku do problemu z wydajnością. To samo dotyczy problemu z wstawianiem zatrzasku strony na gorącym miejscu. I znowu to samo dotyczy problemu z wydajnością logowania. Wszystko zamanifestowałoby się jako "powolne wstawki" (dla jakiejś definicji powolnego) i żadne nie zmieniłoby się w najmniejszym stopniu przez zastąpienie XML przez varchar.

Tak więc, podobnie jak w przypadku wszystkich problemów z wydajnością, zaleca się najpierw zmierzyć i obciąć później. Zalecane jest zastosowanie sprawdzonej i sprawdzonej metodologii badania wydajności, np. Waits and Queues. Zgadywanie nie doprowadzi cię nigdzie szybko.

+0

Dzięki za dokładną odpowiedź! Oto, co wiem: nie CPU, IO jest kwestią rozważań, fragmenty XML są małe, bez odczytów, więc nie ma problemów z odczytem, ​​brak blokady, rywalizacja o zatrzask, brak problemu z logowaniem. Na szczęście jest to dziennik "nice to have", więc wyłączyliśmy go i zajmiemy się off-line w kontroli jakości, gdzie możemy monitorować i testować. – Jim