01/10/2018, 17:31

Cải thiện Performance sql khi query với điều kiện là property trong XML column?

Em search google mà chưa tìm ra solution cải thiện performance cho trường hợp query với table có chứa XML column trong database, bác nào giúp em với?
Em có 1 bản dữ liệu Logs trong đó chứa 1 column Properties định dạng XML.


Định dạng XML như bên dưới:

Câu query em viết mà khi execute mất hơn 2 phút. Có bác nào gặp trường hợp query với điều kiện của XML column trong database chưa.(Em dùng sql server)

SELECT Logs.EventTypeID_FK, Logs.Message, Logs.Properties.value('(/properties/property)[1]', 'varchar(max)')
FROM Logs
WHERE Logs.EventTypeID_FK = 20018
AND Logs.Properties.value('(/properties/property)[1]', 'varchar(max)') = '4410'

Kết quả:

codedien viết 19:34 ngày 01/10/2018

Nếu bạn làm nghiều cách mà không tối ưu được thiết kế của bạn…
thì bạn nên nghĩ đến 1 trường hợp nữa… Đó là thiết kế đó là một thiết kế tồi…
Ngừng tối ưu đi và thiết kế lại nó.

NhatTa viết 19:36 ngày 01/10/2018

Đổi được thì em đổi rồi bác. Muốn tách ra 1 column query cho dễ mà sếp chả cho :v

Mai Anh Dũng viết 19:31 ngày 01/10/2018

Bỏ điều kiện and đi, chỉ xét Logs.EventTypeID_FK = 20018 rồi xử lý condition trên XML sau bằng application thay vì để SQL xử lý cái đó xem có nhanh hơn không.

Mason Ha viết 19:44 ngày 01/10/2018

Logs.EventTypeID_FK = 20018

bạn xem với điều kiện này thì số bản ghi ra bao nhiêu. Với số bản ghi lớn thì có thể query sẽ lâu hơn. Trong câu lệnh truy vấn dường như không có vấn đề gì cả.

NhatTa viết 19:40 ngày 01/10/2018

ition trên XML sau bằng application thay vì để SQL xử lý cái đó xem có nhanh hơn không.

thank bro. Em cũng thử sử lý XML rồi mà nếu xử lý sau lúc query lên được mấy ngàn records :v Query này cũng khá lâu. Em đang sài
Seq để ghi log https://getseq.net/ vào database

NhatTa viết 19:36 ngày 01/10/2018

Số records lớn thật :))

Bài liên quan
0