SlideShare a Scribd company logo
1 of 36
1
Training SQL
Nội dung
1. Cơ bản về SQL & Tối ưu kiểu
2. Tối ưu sử dụng index
3. Tối ưu câu lệnh query
4. Tối ưu thiết kế bảng
5. Các kỹ thuật mới nâng cao hiệu năng
2
• Normalization và Denormalization
• Trigger
• Partition
3
Ví dụ
4
Normalization
Chuẩn 1
• Không có bản ghi trùng lặp
Chuẩn 2
• Là Chuẩn 1
• Các cột phụ thuộc hoàn toàn vào khóa chính
Chuẩn 3
• Là Chuẩn 2
• Các côt phụ thuộc trực tiếp vào khóa chính
5
Chuẩn 1
6
Chuẩn 2
7
Chuẩn 3
8
9
Normalization
hay
Denormalization
Ưu điểm
Normalization Denormalization
• Tìm kiếm, sắp sếp và tạo index nhanh
• Mỗi bẳng có 1 hoặc ít các index
• Linh hoạt trong nhiều truy vấn
• Giảm giá trị null, bớt dư thừa dữ liệu
• Trigger và funciont sẽ thực hiện nhanh
hơn
• Dẽ bảo trì
• Giảm số lần thực hiện join
• Giảm số lượng khóa ngoài
• Giảm số lượng index
• Giảm số lượng bảng
10
Điều kiện áp dụng
• Với 1 DB chuẩn chưa chắc đã tốt
• Denormalization có thể cải thiện về tốc độ
những cần lắm rõ và bàn bạc kỹ
11
Normalization Denormalization
• Cần có kiến thức về chuẩn hóa
• Khi bắt đầu dự án
• Cần có kiến thức sau về chuẩn hóa
• Cần xem sét các cách giải quyết tăng
tốc độ khác
• Cần xem những cột và bẳng liên quan
đang được sử dụng ở đâu
• ORDER BY có được thực hiện hay
không
Denormalization
1. Sao chép cột
2. Tính lại cột
3. Gộp bảng
4. Duplicate bẳng
12
Sao chép cột
13
Sao chép cột
• Yêu cầu
– Thêm dung lượng ổ cứng
– Copy dữ liệu cho cột dữ liệu mới
– Sửa code hoặc them trigger để mỗi lần
update cả 2 bảng
14
Tính lại cột
15
Gộp bảng
16
Duplicate bẳng
17
Denormalization
• Trường hợp đặc biệt
– Đếm số lần truy cập trang
– Cần đếm số tin nhắn trong 1 giờ
• Trường hợp nào chuẩn, trường hợp nào
không chuẩn?
18
19
Trigger
Trigger
• Để tách bảng
20
<?php
function new_post(Request $request) {
// Get request's body
$body = json_decode($request->getContent(), true);
// Insert new post into articles table & retrieve its id
$id = DB::table('articles')->insertGetId($body);
// Insert new post's id into articles_preview table
DB::table('articles_preview')->insert([
'article_id' => $id
]);
}
Trigger
21
CREATE TRIGGER pre_check_post AFTER INSERT ON articles
FOR EACH ROW
INSERT INTO articles_review (article_id)
VALUES (NEW.id);
Trigger
• SHOW TRIGGERS;
• SHOW TRIGGERS FROM database_name;
• SHOW TRIGGERS FROM classicmodels
WHERE `table` = 'employees';
• DROP TRIGGER table_name.trigger_name;
22
23
Partition
Partition
24
Partition
• Query hiệu quả hơn
– Select trong một parttion sẽ nhanh hơn
– Xóa tất cả dữ liệu trong 1 partition nhanh hơn
• Sử phần cứng hiệu quả hơn
• Tránh dead lock
=> Chia để trị
25
Partition
• RANGE
• LIST
• HASH
• KEY
26
Partition
• RANGE
27
CREATE TABLE userslogs (
username VARCHAR(20) NOT NULL,
logdata BLOB NOT NULL,
created DATETIME NOT NULL,
PRIMARY KEY(username, created)
)
PARTITION BY RANGE( YEAR(created) )(
PARTITION from_2013_or_less VALUES LESS THAN (2014),
PARTITION from_2014 VALUES LESS THAN (2015),
PARTITION from_2015 VALUES LESS THAN (2016),
PARTITION from_2016_and_up VALUES LESS THAN MAXVALUE
Partition
• LIST
28
CREATE TABLE serverlogs (
serverid INT NOT NULL,
logdata BLOB NOT NULL,
created DATETIME NOT NULL
)
PARTITION BY LIST (serverid)(
PARTITION server_east VALUES IN(1,43,65,12,56,73),
PARTITION server_west VALUES IN(534,6422,196,956,22)
);
Partition
• HASH
29
CREATE TABLE serverlogs2 (
serverid INT NOT NULL,
logdata BLOB NOT NULL,
created DATETIME NOT NULL
)
PARTITION BY HASH (serverid)
PARTITIONS 10
Partition
• KEY
30
CREATE TABLE serverlogs4 (
serverid INT NOT NULL,
logdata BLOB NOT NULL,
created DATETIME NOT NULL,
UNIQUE KEY (serverid)
)
PARTITION BY KEY() PARTITIONS 10;
Partition
• RANGE
31
CREATE TABLE userslogs (
username VARCHAR(20) NOT NULL,
logdata BLOB NOT NULL,
created DATETIME NOT NULL,
PRIMARY KEY(username, created)
)
PARTITION BY RANGE( YEAR(created) )(
PARTITION from_2013_or_less VALUES LESS THAN (2014),
PARTITION from_2014 VALUES LESS THAN (2015),
PARTITION from_2015 VALUES LESS THAN (2016),
PARTITION from_2016_and_up VALUES LESS THAN MAXVALUE
Partition
• Trường hợp created = NULL sẽ lưu vào
partition nào?
32
Partition
• Câu truy vấn sau tìm partition nào?
33
mysql> EXPLAIN PARTITIONS SELECT * FROM userslogs
WHERE created > '2015-01-01'G
***************************
id: 1
select_type: SIMPLE
table: userslogs
partitions: from_2015, from_2016_and_up
mysql> EXPLAIN PARTITIONS SELECT * FROM userslogs
WHERE YEAR(created) = 2015G
Partition
34
mysql> EXPLAIN PARTITIONS SELECT * FROM userslogs
WHERE YEAR(created) = 2015G
***************************
id: 1
select_type: SIMPLE
table: userslogs
partitions: from_2013_or_less, from_2014,
from_2015, from_2016_and_up
Tổng hợp
• Chuẩn chưa hản đã tốt nhưng nên thiết chuẩn
từ đầu
• Khi cần bỏ chuẩn hóa cần chú ý những phần
đang sử dụng.
• Tránh thay đổi những bảng cũ mà nên tìm cách
thêm bảng mới
• Nên dùng trigger thay cho đổi logic code
• Partition là phương pháp hiệu quả nhưng chỉ
nên sử dụng với dữ liệu lớn
35
36

More Related Content

What's hot

Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTMasterCode.vn
 
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPTBÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPTMasterCode.vn
 
Chương 3 Ngôn ngữ truy vấn có cấu trúc (SQL)
Chương 3 Ngôn ngữ truy vấn có cấu trúc (SQL)Chương 3 Ngôn ngữ truy vấn có cấu trúc (SQL)
Chương 3 Ngôn ngữ truy vấn có cấu trúc (SQL)Hoa Le
 
Bài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL serverBài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL serverMasterCode.vn
 
Co so du lieu t sql
Co so du lieu t sqlCo so du lieu t sql
Co so du lieu t sqlANHMATTROI
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3pisu412
 
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTBài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTMasterCode.vn
 
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...MasterCode.vn
 
Tối ưu-cau-lệnh-oracle-sql
Tối ưu-cau-lệnh-oracle-sqlTối ưu-cau-lệnh-oracle-sql
Tối ưu-cau-lệnh-oracle-sqlViet Tran
 
Tai lieu quan tri he thong erp oracle
Tai lieu quan tri he thong erp oracleTai lieu quan tri he thong erp oracle
Tai lieu quan tri he thong erp oracleKiet Tran
 
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)Pix Nhox
 
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...MasterCode.vn
 
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPTBài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPTMasterCode.vn
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 5
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 5Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 5
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 5pisu412
 
Ebook oracle-thuc-hanh-nguyen-huu-trong
Ebook oracle-thuc-hanh-nguyen-huu-trongEbook oracle-thuc-hanh-nguyen-huu-trong
Ebook oracle-thuc-hanh-nguyen-huu-trongngobacuong
 
csdl bai-thuchanh_01
csdl bai-thuchanh_01csdl bai-thuchanh_01
csdl bai-thuchanh_01kikihoho
 

What's hot (20)

Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
 
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPTBÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
 
Chương 3 Ngôn ngữ truy vấn có cấu trúc (SQL)
Chương 3 Ngôn ngữ truy vấn có cấu trúc (SQL)Chương 3 Ngôn ngữ truy vấn có cấu trúc (SQL)
Chương 3 Ngôn ngữ truy vấn có cấu trúc (SQL)
 
Web201 slide 7
Web201   slide 7Web201   slide 7
Web201 slide 7
 
Bài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL serverBài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL server
 
Web201 slide 2
Web201   slide 2Web201   slide 2
Web201 slide 2
 
Co so du lieu t sql
Co so du lieu t sqlCo so du lieu t sql
Co so du lieu t sql
 
Tip oracle
Tip oracleTip oracle
Tip oracle
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
 
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTBài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
 
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
 
Tối ưu-cau-lệnh-oracle-sql
Tối ưu-cau-lệnh-oracle-sqlTối ưu-cau-lệnh-oracle-sql
Tối ưu-cau-lệnh-oracle-sql
 
Tai lieu quan tri he thong erp oracle
Tai lieu quan tri he thong erp oracleTai lieu quan tri he thong erp oracle
Tai lieu quan tri he thong erp oracle
 
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
SQL Cursor - kiểu dữ liệu Cursor (Kiểu dữ liệu con trỏ)
 
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
 
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPTBài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 5
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 5Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 5
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 5
 
Ebook oracle-thuc-hanh-nguyen-huu-trong
Ebook oracle-thuc-hanh-nguyen-huu-trongEbook oracle-thuc-hanh-nguyen-huu-trong
Ebook oracle-thuc-hanh-nguyen-huu-trong
 
Web201 slide 3
Web201   slide 3Web201   slide 3
Web201 slide 3
 
csdl bai-thuchanh_01
csdl bai-thuchanh_01csdl bai-thuchanh_01
csdl bai-thuchanh_01
 

More from Đông Đô

Maria db spider engine
Maria db spider engineMaria db spider engine
Maria db spider engineĐông Đô
 
Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...
Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...
Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...Đông Đô
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)Đông Đô
 
The Art of Readable Code - DongPV
The Art of Readable Code - DongPVThe Art of Readable Code - DongPV
The Art of Readable Code - DongPVĐông Đô
 

More from Đông Đô (6)

Maria db spider engine
Maria db spider engineMaria db spider engine
Maria db spider engine
 
Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...
Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...
Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...
 
Daily scrum
Daily scrumDaily scrum
Daily scrum
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)
 
Pair programing
Pair programingPair programing
Pair programing
 
The Art of Readable Code - DongPV
The Art of Readable Code - DongPVThe Art of Readable Code - DongPV
The Art of Readable Code - DongPV
 

Training sql4

  • 2. Nội dung 1. Cơ bản về SQL & Tối ưu kiểu 2. Tối ưu sử dụng index 3. Tối ưu câu lệnh query 4. Tối ưu thiết kế bảng 5. Các kỹ thuật mới nâng cao hiệu năng 2
  • 3. • Normalization và Denormalization • Trigger • Partition 3
  • 5. Normalization Chuẩn 1 • Không có bản ghi trùng lặp Chuẩn 2 • Là Chuẩn 1 • Các cột phụ thuộc hoàn toàn vào khóa chính Chuẩn 3 • Là Chuẩn 2 • Các côt phụ thuộc trực tiếp vào khóa chính 5
  • 10. Ưu điểm Normalization Denormalization • Tìm kiếm, sắp sếp và tạo index nhanh • Mỗi bẳng có 1 hoặc ít các index • Linh hoạt trong nhiều truy vấn • Giảm giá trị null, bớt dư thừa dữ liệu • Trigger và funciont sẽ thực hiện nhanh hơn • Dẽ bảo trì • Giảm số lần thực hiện join • Giảm số lượng khóa ngoài • Giảm số lượng index • Giảm số lượng bảng 10
  • 11. Điều kiện áp dụng • Với 1 DB chuẩn chưa chắc đã tốt • Denormalization có thể cải thiện về tốc độ những cần lắm rõ và bàn bạc kỹ 11 Normalization Denormalization • Cần có kiến thức về chuẩn hóa • Khi bắt đầu dự án • Cần có kiến thức sau về chuẩn hóa • Cần xem sét các cách giải quyết tăng tốc độ khác • Cần xem những cột và bẳng liên quan đang được sử dụng ở đâu • ORDER BY có được thực hiện hay không
  • 12. Denormalization 1. Sao chép cột 2. Tính lại cột 3. Gộp bảng 4. Duplicate bẳng 12
  • 14. Sao chép cột • Yêu cầu – Thêm dung lượng ổ cứng – Copy dữ liệu cho cột dữ liệu mới – Sửa code hoặc them trigger để mỗi lần update cả 2 bảng 14
  • 18. Denormalization • Trường hợp đặc biệt – Đếm số lần truy cập trang – Cần đếm số tin nhắn trong 1 giờ • Trường hợp nào chuẩn, trường hợp nào không chuẩn? 18
  • 20. Trigger • Để tách bảng 20 <?php function new_post(Request $request) { // Get request's body $body = json_decode($request->getContent(), true); // Insert new post into articles table & retrieve its id $id = DB::table('articles')->insertGetId($body); // Insert new post's id into articles_preview table DB::table('articles_preview')->insert([ 'article_id' => $id ]); }
  • 21. Trigger 21 CREATE TRIGGER pre_check_post AFTER INSERT ON articles FOR EACH ROW INSERT INTO articles_review (article_id) VALUES (NEW.id);
  • 22. Trigger • SHOW TRIGGERS; • SHOW TRIGGERS FROM database_name; • SHOW TRIGGERS FROM classicmodels WHERE `table` = 'employees'; • DROP TRIGGER table_name.trigger_name; 22
  • 25. Partition • Query hiệu quả hơn – Select trong một parttion sẽ nhanh hơn – Xóa tất cả dữ liệu trong 1 partition nhanh hơn • Sử phần cứng hiệu quả hơn • Tránh dead lock => Chia để trị 25
  • 27. Partition • RANGE 27 CREATE TABLE userslogs ( username VARCHAR(20) NOT NULL, logdata BLOB NOT NULL, created DATETIME NOT NULL, PRIMARY KEY(username, created) ) PARTITION BY RANGE( YEAR(created) )( PARTITION from_2013_or_less VALUES LESS THAN (2014), PARTITION from_2014 VALUES LESS THAN (2015), PARTITION from_2015 VALUES LESS THAN (2016), PARTITION from_2016_and_up VALUES LESS THAN MAXVALUE
  • 28. Partition • LIST 28 CREATE TABLE serverlogs ( serverid INT NOT NULL, logdata BLOB NOT NULL, created DATETIME NOT NULL ) PARTITION BY LIST (serverid)( PARTITION server_east VALUES IN(1,43,65,12,56,73), PARTITION server_west VALUES IN(534,6422,196,956,22) );
  • 29. Partition • HASH 29 CREATE TABLE serverlogs2 ( serverid INT NOT NULL, logdata BLOB NOT NULL, created DATETIME NOT NULL ) PARTITION BY HASH (serverid) PARTITIONS 10
  • 30. Partition • KEY 30 CREATE TABLE serverlogs4 ( serverid INT NOT NULL, logdata BLOB NOT NULL, created DATETIME NOT NULL, UNIQUE KEY (serverid) ) PARTITION BY KEY() PARTITIONS 10;
  • 31. Partition • RANGE 31 CREATE TABLE userslogs ( username VARCHAR(20) NOT NULL, logdata BLOB NOT NULL, created DATETIME NOT NULL, PRIMARY KEY(username, created) ) PARTITION BY RANGE( YEAR(created) )( PARTITION from_2013_or_less VALUES LESS THAN (2014), PARTITION from_2014 VALUES LESS THAN (2015), PARTITION from_2015 VALUES LESS THAN (2016), PARTITION from_2016_and_up VALUES LESS THAN MAXVALUE
  • 32. Partition • Trường hợp created = NULL sẽ lưu vào partition nào? 32
  • 33. Partition • Câu truy vấn sau tìm partition nào? 33 mysql> EXPLAIN PARTITIONS SELECT * FROM userslogs WHERE created > '2015-01-01'G *************************** id: 1 select_type: SIMPLE table: userslogs partitions: from_2015, from_2016_and_up mysql> EXPLAIN PARTITIONS SELECT * FROM userslogs WHERE YEAR(created) = 2015G
  • 34. Partition 34 mysql> EXPLAIN PARTITIONS SELECT * FROM userslogs WHERE YEAR(created) = 2015G *************************** id: 1 select_type: SIMPLE table: userslogs partitions: from_2013_or_less, from_2014, from_2015, from_2016_and_up
  • 35. Tổng hợp • Chuẩn chưa hản đã tốt nhưng nên thiết chuẩn từ đầu • Khi cần bỏ chuẩn hóa cần chú ý những phần đang sử dụng. • Tránh thay đổi những bảng cũ mà nên tìm cách thêm bảng mới • Nên dùng trigger thay cho đổi logic code • Partition là phương pháp hiệu quả nhưng chỉ nên sử dụng với dữ liệu lớn 35
  • 36. 36