MySQL và Database - Vài điều hay ho - Phần 1
Mysql
49
Database
33
NyLaa
4
White

Văn Đức Thái viết ngày 05/08/2018

1. Tản mạn ngoài lề

alt text
MySQL với DB thì có cái quần què gì chứ?

Đọc thôi để thấy cũng vài cái hay ho và này nọ.

2. MySQL: MyISAM & InnoDB & Memory

Chúng ta đã biết MySQL là hệ quản trị cơ sở dữ liệu miễn phí được sử dụng nhiều trong PHP. Khi tạo bảng trong MySQL sẽ có nhiều kiểu Storage Engine để lựa chọn. MyIsam & Innodb & Memory là 3 thằng sử dụng nhiều nhất. Thử tìm hiểu về chúng xem.

a. MyISAM
Đây là kiểu Storage Engine mặc định khi tạo bảng và được dùng phổ biết nhất. Storage Engine này cho phép lập chỉ mục toàn cột (Full-text search indexes). Do đó, Storage Engine này cho tốc độ truy suất (Đọc và tìm kiếm) nhanh trong các Storage Engine.

Nhược điểm của MyISAM là sử dụng cơ chế table-level locking nên khi cập nhật (Thêm,xóa,sửa) 1 bản ghi nào đó trong cùng 1 table thì table đó sẽ bị khóa lại, không cho cập nhật (Thêm,xóa,sửa) cho đến khi thao tác cập nhật trước đó thực hiện xong.

b. InnoDB
Không như trước đây, giờ đây InnoDB cũng đã hỗ trợ Full-text search indexes từ phiên bản 5.6. Và thêm cái hay nữa là nó hỗ trợ khóa ngoại Foreign key.

Tốc độ insert/update/delete tốt nhất do hoạt động theo cơ chế Row Level Locking nên khi cập nhật (Thêm,xóa,sửa) 1 bảng thì chỉ có bản ghi đang bị thao tác bị khóa mà thôi, các hoạt động khác trên table này vẫn diễn ra bình thường.

c. MEMORY
MEMORY engine (HEAP) là engine phù hợp nhất cho việc truy cập dữ liệu nhanh, vì mọi thứ đều được lưu trữ trong RAM. Khi khởi động lại MySQL hay Server, tất cả dữ liệu sẽ bị xóa hết.
alt text
Vậy thì

  • Dùng MyISAM với những thằng có tần suất đọc cao như 24h, vnexpress, blog, ...
  • Dùng InnoDB với những thằng hay động vào DB như Diễn đàn, Mạng xã hội, ...
  • Dùng MEMORY cho các table chứa dữ liệu tạm và thông tin phiên làm việc của người dùng (Session)

3. Một số thao tác với SQL

Cái này khá easy. Mình chỉ xin liệt kê một số cái mà ai cũng đã biết :D.

Table
CREATE DATABASE ; DROP DATABASE ; USE ; CREATE TABLE ; ALTER TABLE ; DROP TABLE ; DESCRIBE

Dữ liệu
SELECT ; INSERT ; UPDATE ; DELETE ; REPLACE ; TRUNCATE TABLE

Giao dịch
START TRANSACTION ; COMMIT ; ROLLBACK

(^-^) Một số thủ thuật tối ưu câu lệnh SQL

  • Nghiêm cấm select *. 10 ông thì quá nửa ông bị kiểu này. Cái DB be bé xinh xinh thì không sao. To đùng phát chết luôn.

Nhẹ hơn select * là vấn đề làm sao tối ưu câu query, giống như việc tối ưu code ấy. Làm sao để không xảy ra tình trạng Dư thừa dữ liệu

  • Thêm WHERE trong câu lệnh sql.

  • Hạn chế dùng DISTINCT nếu không thật sự cần thiết. Vì nó làm chậm quá trình truy vấn dữ liệu.

  • Nếu bạn có sự chọn lựa giữa INEXISTS trong câu truy vấn, khi mà kết quả của sub-query lớn, bạn hãy chọn EXISTS là tốt nhất. Tương tự như INBETWEEN, hãy chọn BETWEEN.

  • Bạn hãy cố gắng tránh sử dụng các toán tử sau trong mệnh đề WHERE: IS NULL, <>, !=, !>, !<, NOT, NOT EXISTS, NOT IN, NOT LIKE, and LIKE /'%abc'. Vì những toán tử này nó không sử dụng đặc tính index mà thay vì thế nó sẽ dò tìm toàn bảng gây ảnh hưởng đến tốc độ của câu truy vấn.

  • Nên dùng LIMIT hoặc TOP khi cần thiết. Ví dụ bạn chỉ cần dùng 100 record để xử lý thì cũng không cần thiết phải lấy hết dữ liệu trong DB ra làm gì.

  • So với việc dùng <= thì việc dùng < thì tốt hơn.
    Ví dụ

    select name from member where year < 1992
    

    sẽ tốt hơn là

    select name from member where year <= 1991
    
  • Nếu trong truy vấn có HAVING thì nên sử dụng WHERE để hạn chế những hàng không cần thiết.

  • Trong truy vấn nếu có một hoặc nhiều OR thì có thể viết lại bằng cách sử dụng UNION ALL.

    SELECT employeeID, firstname, lastname
    FROM Employees
    WHERE dept = 'prod' or city = 'Orlando' or division = 'food' 
    

    có thể viết lại

    SELECT employeeID, firstname, lastname FROM Employees WHERE dept = 'prod'
    UNION ALL
    SELECT employeeID, firstname, lastname FROM Employees WHERE city = 'Orlando'
    UNION ALL
    SELECT employeeID, firstname, lastname FROM Employees WHERE division = 'food' 
    

Để tìm hiểu kỹ hơn về SQL thì bạn có thể vào đây

Thời đại 4.0 đến rồi. Giờ cái gì cũng hỗ trợ, tối ưu, đơn giản hóa cả. Ngay cả việc query SQL cũng đã có những bước tiến vượt bậc. Cùng tìm hiểu thôi nào!!!

4. ORM

Hiểu một cách đơn giản ORM (Object Relational Mapping), là một kỹ thuật/cơ chế lập trình thực hiện ánh xạ CSDL sang các đối tượng trong các ngôn ngữ lập trình hướng đối tượng.

Ví dụ thay vì

select * from flights where active = 1 order by name desc limit 10;

Thì trong Eloquent Laravel

$flights = App\Flight::where('active', 1)
               ->orderBy('name', 'desc')
               ->take(10)
               ->get();

Nói về ưu điểm của ORM thì nhiều lắm, có thể kể đến

  • OOP
  • Nó có thể làm việc được với nhiều loại database, nhiều kiểu dữ liệu khác nhau.
  • Đơn giản, dễ sử dụng, có thể tái sử dụng.
  • Code ngắn hơn, đọc phát hiểu luôn. Và đặc biệt rất thuận tiện trong các case CRUD (Create, Read, Update, Delete)
  • Có thể không cần học sql =)). Thực tế là có thể dùng ORM mà không biết gì về SQL.

Câu hỏi ngược lại. Có thật là không cần học SQL thuần không?

Vẫn có nhé. Vì bản chất ORM cũng từ SQL mà sinh ra.

Còn có một vấn đề nữa là với những câu Query phức tạp (đặc biệt là liên quan đến join các bảng) thì ORM khó xử lý, lúc này phải dùng đến các câu Sql củ chuối đó. Một điểm trừ cho ORM.

Tối ưu hóa các câu lệnh SQL là điều nên làm đối với các dữ liệu lớn, tuy nhiên đối với ORM quá trình này rất khó khăn và phức tạp, bởi vì bạn phải tuân theo thiết kế của ORM .

5. Tóm lại

Phần này mình chỉ nói về MySQL, ORM

Sẽ có phần 2 nói về Database.

Cùng đón chờ vài điều hay ho nữa.

Hãy để lại ý kiến của bản thân đóng góp cho bài viết để bài viết hoàn chỉnh hơn.

Bài Bái

(。◕‿◕。) NyLaa (。◕‿◕。)

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Văn Đức Thái

17 bài viết.
93 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
24 13
1. Tản mạn ngoài lề Khuya vật vã. Chẳng ngủ được. Mà chẳng biết làm gì giữa cái lúc dở dở ương ương này. Viết blog vậy :(. Bài viết dành cho các...
Văn Đức Thái viết 1 năm trước
24 13
White
18 3
1. Tản mạn ngoài lề (Ảnh) Khi gặp một vấn đề trong cuộc sống bạn sẽ làm gì? Người yêu đá đít, cuối tháng hết tiền lương, sếp đì trên đi xuống, bl...
Văn Đức Thái viết 1 năm trước
18 3
White
16 14
1. Tản mạn ngoài lề Như chúng ta đã biết việc gửi mail về cho người dùng trong web là một vấn đề phổ biến. Điển hình như gửi confirm mail khi mem...
Văn Đức Thái viết 1 năm trước
16 14
Bài viết liên quan
White
1 0
Kotlin giờ là một từ khóa làm điên đảo cả giới lập trình viên đặc biệt là lập trình viên android. Kotlin hiện nay rất phổ biến và cực kì mạnh mẽ, c...
Aragami1408 viết 10 tháng trước
1 0
White
24 13
1. Tản mạn ngoài lề Khuya vật vã. Chẳng ngủ được. Mà chẳng biết làm gì giữa cái lúc dở dở ương ương này. Viết blog vậy :(. Bài viết dành cho các...
Văn Đức Thái viết 1 năm trước
24 13
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
17 bài viết.
93 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!