Tôi liên tục thấy mọi người nói rằng các chỉ số chậm lại update
, delete
và insert
. Điều này được sử dụng như một tuyên bố chăn, như thể nó là một tuyệt đối.
Trong khi điều chỉnh cơ sở dữ liệu của mình để cải thiện hiệu suất, tôi tiếp tục gặp tình huống này dường như mâu thuẫn với quy tắc đó một cách logic và tôi không thể tìm thấy ai nói hoặc giải thích theo bất kỳ cách nào khác.
Trong SQL Server và tôi tin / giả định hầu hết các DBMS khác, các chỉ mục của bạn được tạo dựa trên các cột cụ thể mà bạn chỉ định. Chèn và xóa sẽ luôn ảnh hưởng đến toàn bộ một hàng, vì vậy không có cách nào chúng sẽ không ảnh hưởng đến chỉ mục, nhưng các bản cập nhật có vẻ độc đáo hơn một chút, chúng chỉ có thể ảnh hưởng đến một số cột nhất định.
Nếu tôi có các cột không được bao gồm trong bất kỳ chỉ mục nào và tôi cập nhật chúng, chúng có bị chậm lại chỉ vì tôi có một chỉ mục trên các cột khác trong bảng đó không?
Ví dụ, giả sử trong User
bảng của tôi, tôi có một hoặc hai chỉ mục, khóa chính là cột Nhận dạng / Tự động và có thể là một cột khác trên một số cột khóa ngoại.
Nếu tôi cập nhật một cột không có chỉ mục trực tiếp trên đó, như nói số điện thoại hoặc địa chỉ của họ, thì bản cập nhật này có bị chậm lại không vì tôi có các chỉ mục trên bảng này trên các cột khác trong cả hai trường hợp? Các cột tôi đang cập nhật không có trong các chỉ mục, vì vậy về mặt logic, các chỉ mục không nên được cập nhật, phải không? Nếu bất cứ điều gì, tôi sẽ nghĩ rằng chúng được tăng tốc nếu tôi sử dụng các chỉ mục trong mệnh đề WHERE.
so there is no way they will not affect the index
ngoại trừ các chỉ mục được lọc ...