Hỏi về view trong database

database
view

(Nguyễn Quảng Đại) #1

Mình cũng tìm kiếm và có vài thắc mắc về View trong DB.

  • Về View thì ai cũng biết nó để đơn giản hóa các câu lệnh trong database rồi (Có thể coi đây là 1 ưu điểm)
  • Vấn đề thứ 2 là tốc độ
  • Mình có nghe nói là nó sẽ nhanh hơn nhưng mình đang có chút thắc mắc như sau.
    • Mỗi lần gọi đến view thì nó có thực hiện truy xuất lại cái câu query lúc tạo ra nó hay không? Hay là nó lưu trữ dữ liệu rồi lúc gọi đến thì nó chỉ cần lấy trong chính cái bảng nó đã lưu.
    • Nếu như nó đã lưu trữ dữ liệu (Thực tế nội dung dữ liệu sẽ thay đổi khi bảng thật thay đổi) Vậy khi thay đổi dữ liệu của bảng chính thì cơ chế nào để nó phát hiện sẽ ảnh hưởng tới View kia và cập nhật lại phần view(Bảng ảo)

(asdasdasd) #2

ko thực hiện gì ở bảng chính cả trừ lúc tạo view, nếu đã tạo view xong rồi thì cần thao tác với View thôi.

Cái này View tự update khi bảng chính có sự thay đổi mà.


(Nguyễn Quảng Đại) #3

cám ơn bạn!
Ý mình muốn hỏi là khi mình dùng đến view thì cái view kia nó có giao tiếp lại với bảng chính mỗi lần mình gọi view không ấy.


(asdasdasd) #4

Đơn giản mà, hiện tại bạn biết khi thao tác với bảng chính thì bảng ảo (VIEW) sẽ được cập nhật giống bảng chính.

Ngược lại bạn thao tác với bảng ảo ( VIEW ) xem nó có update ở bảng chính hay ko.

Một câu lệnh SQL là biết được thôi mà.


(Code Đại Hiệp) #5

View đơn giản để gói gọn một câu truy vấn phức tạp và hay dùng ở nhiều nơi. Hình như b chưa hiểu bản chất của view


(asdasdasd) #6

Có lẽ mình chưa hiểu thật :slight_smile:


(Nguyễn Quảng Đại) #7

Vậy những ảnh hưởng về tốc độ hay hiệu năng là có hay không bạn?


(Hai Lúa) #8

Có 2 loại views:

1. Materialised view (hay còn gọi tắt là mview): đây là view có chứa dữ liệu, hay nói cái khác là nó có data segment để lưu dữ liệu. Đối với loại view này, chúng ta cần phải có job chạy định kỳ để update lại dữ liệu.
Thường dùng khi query data qua database link hay csdl phân tán,…

2. View thông thường: Đây là view thường được nhắc tới nhất.
Điều đầu tiên cần phải biết đó là nó KHÔNG chứa dữ liệu, cho nên, ko có chuyện phải “update” lại data cho view.
Về bản chất nó chỉ là 1 câu query được lưu vào trong database, thay vì bạn lưu thành file trên đĩa cứng, và đặt cho nó mộ cái tên.

Lợi ích của view: Cái này thì nhiều lắm, có thể kể ra như sau:

  • Làm đơn giản hóa những câu query phức tạp.
  • Phân quyền trên dòng, trên cột: Như đã biết thì việc phân quyền trên cả table là ko khó, hầu như csdl nào cũng hổ trợ, tuy nhiên việc phân quyền trên dòng thì phức tạp hơn nhiều, trên cột còn khó khăn hơn. Vì vậy người ta tạo view với những cột và miền dư liệu nhất định, sau đó grant quyền cho user truy cập vào view thay vì truy cập trực tiếp vào table.
  • Tăng perfomance: Khi chúng ta execute 1 câu query, database engine sẽ thự hiện 1 loạt các thao tác như kiểm tra syntax, tables, columns, quyền truy cập, optimize, tạo execution plan,… cái này gọi là HARD PARSE, tuy nhiên, khi chúng ta gọi view, một số bước trong quá trình trên có thể được loại trừ (SOFT PARSE) nên dẫn đến việc câu lệnh được thực thi nhanh hơn.
  • Ngoài ra còn nhiều thứ khác, bạn có thể google để tham khảo.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?