Index là gì phong cách Pokemon GO

Dạo này trào lưu chơi Pokemon GO lên khá là lớn. Lực lượng 500 anh em tham gia từ già trẻ gái trai, hội phụ nữ, hội phụ lão đến các cháu thiếu niên nhi đồng, thanh niên, trẻ trâu đủ cả. Nhân tiện trào lưu này đang hot mình cũng xin giới thiệu 1 chủ đề chưa bao giờ hết hot trong giới anh em dev cỏ. Đó là Database hay Cơ sở dữ liệu. Chi tiết trong bài viết sẽ là về Index: Index là gì? Tác dụng của Index? Có những loại Index nào?Tất cả sẽ được trình bày theo phong cách POKEMON GO :3 Bài viết đầu tay theo phong cách tranh minh họa, có gì anh em ném gạch hạn chế :v

Nào GO!!!!!!!!!!!!!!!

IMG_20160822_211547_HDR

Index là gì?

Trong hình mình có mô tả cách mà  dữ liệu được lưu trong ổ cứng tương tự như trong DB. Dữ liệu sẽ nằm tóe loe ở khắp mọi nơi giống như các địa điểm có xuất hiện Pokemon. Mỗi lần anh em truy vấn là máy tính sẽ đi lần mò trong ổ đĩa để tìm :3 (Con pikachu vẽ hơi béo :v con này làm con Pippi hợp lý hơn :)) )

IMG_20160822_211558_HDR

WTF? Mỗi lần tìm là máy tính lại đi mò lại hết à. Thế thì chết 😐 Nhọc lắm. Nếu cái máy tính của chúng ta mà có thể diễn đạt cảm xúc thì mặt nó chắc cũng như thằng RED bên dưới ấy nhỉ :-O

IMG_20160822_211654_HDR

Nếu vậy thì phải có giải pháp nào chứ 😦 Ai lại đi mò hết cả ổ cứng được chứ :(( Anh em đừng lo đã có chúng tôi: đội ROCKET.

Cái gì đội ROCKET á 😐 Bọn này làm cái gì cũng hỏng cơ mà :(( Anh em yên tâm lần này đội ROCKET đã mang đến cho chúng ta một tính năng thật sự hữu ích được ứng dụng trong toàn bộ các hệ CSDL quan hệ đó chính là INDEX

IMG_20160822_211631_HDR

Thế túm váy lại thì INDEX là gì?

Thực chất thì INDEx là một con trỏ trỏ tới dữ liệu trong bảng để tăng nhanh thời gian và hiệu suất thu thập ứng dụng. Nó tương tự như phần MỤC LỤC ở mỗi cuốn sách

Ô hay vậy à? Nhưng mà làm gì có bữa cơm nào miễn phí dễ dàng vậy chứ? Chắc có gì nguy hiểm đây?

Đúng!!

INDEX sẽ giúp chúng ta tăng tốc các câu truy vấn SELECT và các mệnh đề WHERE nhưng nó sẽ làm chậm việc nhập dữ liệu vào đối với các câu lệnh UPDATE và INDSERT.

Đấy tôi biết mà :3 Thế cách áp dụng thì thế nào?

500 anh em có thể tham khảo như hình dưới nhé.

Chúng ta hay đi bắt POKEMON thì cũng biết con nào mà mình bắt về thì đều có đủ các thông số nào là tên nó là gì, chỉ số CP, chiều cao, cân năng, chủng loại…

IMG_20160822_211705_HDR

Chúng ta thì thấy vậy nhưng thằng CSDL thì nó sẽ tiến hành lưu các thông tin này trên các COLUMN, từng con Pokemon bắt được sẽ là từng ROW trong TABLE.

Anh em mà muốn tìm 1 con Pokemon trong hằng hà sa số con bắt được thì phải gõ tìm theo các tiêu chí mà mình nhớ được. Đặc biệt thì ai cũng tìm theo tên rồi : 3 Đấy chúng ta sẽ đánh INDEX cho trường tên để tăng tốc tìm kiếm

Cú pháp

CREATE INDEX ten_chi_muc
ON ten_bang (ten_cot);

Như với ví dụ trên thì có mã giả

CREATE INDEX IDEX_POKEMON_LIST_NAME
ON POKEMON_LIST (NAME);

Nghe cũng đơn giản nhỉ 😕 Thì có ai bảo là khó đâu. Tuy nhiên anh em lưu ý đó là vì nó sẽ làm giảm hiệu năng việc INSERT và UPDATE nên mình cần phải chọn lựa thật kĩ cột để đánh INDEX. Con nhà người ta khuyến khích đánh INDEX cho các trường trong câu lệnh WHERE, lệnh ORDER và GROUP.

INDEX có mấy loại?

Index thì có nhiều loại lắm lắm. Nhưng chủ yếu anh em chỉ cần quan tâm đến 2 loại đó là Clusterindex và Non-cluster index. Nghe đã thấy nó ngược nhau như 2 con Pokemon hệ lửa hệ nước ấy nhỉ 😀
IMG_20160822_212246_HDR

Cluster index:

  • Khi bảng được tạo clustered index thì bản thân nó trở thành một cây index, với các node lá chứa khóa là các trường được index và cũng đồng thời chứa tất cả các trường còn lại của bảng. Mỗi bảng thì chỉ có thể tối đa một clustered index.
  • Clusterindex thì không nhất thiết phải là duy nhất. CSDL có cơ chế riêng cho thằng này để đảm bảo duy nhất khi nó thực hiện truy vấn. Không nói chi tiết tránh anh em thấy rối rắm
  • Mặc định khi anh em tạo khóa chính trên bảng thì sẽ được tạo Clusterindex trên cột khóa chính

Non-cluster index: thì nó trái với thằng trên thôi. Nó khác là có thể nhiều hơn 1 index. Còn được bao nhiêu mình chả nhớ 😦 Anh em google tạm vậy.

Tham khảo

http://www.w3schools.com/sql/sql_create_index.asp

https://msdn.microsoft.com/en-us/library/ms190457.aspx

http://www.sqlviet.com/blog/clustered-index

 

 

Advertisements

One thought on “Index là gì phong cách Pokemon GO

  1. Pingback: Tối ưu SQL (phần 10): Lại là câu chuyện về GUID ID | Code, code and more code

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s