Dùng Index để xử lý Lock đối với Table có Foreign Key | SQL Tutorial

Поделиться
HTML-код
  • Опубликовано: 13 сен 2024
  • #tuningsql #foreignkey
    Mục tiêu: Sai lầm không thiết kế Index trên Foreign Key sẽ ảnh hưởng nghiêm trọng đến hiệu năng như thế nào?
    Ghi chú: Nếu bạn là một lập trình viên và muốn phát triển sự nghiệp một cách nhanh chóng hơn. Tôi có một khoá học có thể giúp bạn phát triển rất nhanh (cả về CHIỀU RỘNG và CHIỀU SÂU), tại khoá học này bạn sẽ được chia sẻ tất cả những kinh nghiệm và kiến thức của tôi đã tích luỹ trong hơn 10 năm trực tiếp điều hành Wecommit - công ty chuyên tư vấn và tối ưu các cơ sở dữ liệu và hệ thống lớn.
    Xem chi tiết khoá học của tôi ở đây: wecommit.com.v...
    Bạn có thể xem các dự án mà tôi đã trực tiếp thực hiện tại đây: wecommit.com.v...
    🎯 Một số Video khác bạn có thể xem:
    - Quy trình 6 bước phải biết khi tối ưu câu lệnh SQL: • Quy trình 6 bước buộc ...
    - Hiểu toàn bộ kiến thức về PostgreSQL trong 1h30 phút: • Hiểu toàn bộ PostgreSQ...
    - Học SQL Server trong 60 phút : • Học SQL Server trong 6...
    - Học MongoDB trọn vẹn trong 1 giờ 30 phút: • Học MongoDB trọn vẹn t...
    - Hiểu kiến trúc của cơ sở dữ liệu Oracle trong 20 phút: • Hiểu Oracle Database t...
    📱 Nếu bạn muốn liên hệ với tôi:
    Zalo: 0888549190
    Linkedin: / huytq
    Facebook: / tranquochuy.toiuu
    🌐 Nguồn tài liệu: Tôi tổng hợp từ các kiến thức và kinh nghiệm của bản thân trong hơn 10 năm làm các dự án tối ưu cơ sở dữ liệu.
    #toiuu100x #tranquochuy #wecommit #databasedesign #databaseperformance #databasetutorial #toiuucosodulieu #thietkecosodulieu #toiuusql

Комментарии • 32

  • @tranquochuywecommit
    @tranquochuywecommit  Год назад

    Tham gia nhóm Zalo của tôi (miễn phí) để cập nhật các bài viết về tối ưu cơ sở dữ liệu, tối ưu SQL hàng tuần: zalo.me/g/muffpn890

  • @dbt1231
    @dbt1231 2 месяца назад +1

    có ý kiến cho rằng, gần đây các developer đang có xu hướng drop ràng buộc foreign key khi thiết kế csdl, mục đích để tăng performance. bạn có nhận xét gì về ý kiến đó? thank bạn @TranQuocHuy

    • @hieuvuduc8840
      @hieuvuduc8840 2 месяца назад +2

      Mình cũng chung câu hỏi vì dự án hiện tại sếp bên mình cũng đang yêu cầu k dùng foreign key. Mong được a Huy giải đáp

    • @tunamusic2314
      @tunamusic2314 Месяц назад

      thế sao join các bảng lấy data liên quan nhỉ

    • @hieuvuduc8840
      @hieuvuduc8840 Месяц назад

      @@tunamusic2314 sẽ lên service xử lý ấy bác ơi

    • @dbt1231
      @dbt1231 Месяц назад

      @@tunamusic2314 có hay không thì vẫn join được mà bạn. Ý mình ở đây là việc thiết lập foreign trong DB

    • @DatNickNganGonVaDeNho
      @DatNickNganGonVaDeNho Месяц назад +3

      Foreign key sinh ra để thêm ràng buộc dữ liệu, đảm bảo nếu xảy ra update thì sẽ check constraint ở tầng db, thực tế khi dev bỏ constraint này đi thì sẽ lợi nhiều lợi ích, nhưng ở prod mà bỏ constraint đi thì sẽ có rủi ro rất lớn, phải handle toàn bộ các câu lệnh sql, và thường xử dụng ORM mới làm đc điều này ( protect đc bằng CASCADE ở hầu hết framework khi xây dựng ORM), quy mô dự án vừa và nhỏ thường đc xử dụng, nhưng khi lên prod thường sẽ thêm các constraint (foreign key, unique,…) vào.
      Vẫn là câu chuyện đánh đổi performance và consistancy, nếu nhắm handle đc thì bỏ, db đỡ phải check constraint, vì tầng BE chắc chắn đã validate trước khi update/delete.
      Thường những dự án lớn như banking sẽ có 1 đội DB riêng, chuyên cung cấp procedure cho BE. Còn lại thì BE sẽ tự handle toàn bộ constraint, ko apply constraint trên db.

  • @tranttlc4645
    @tranttlc4645 Год назад +1

    Cái đoạn PK vs FK a ko nói rõ lắm. Chứ e thấy ít ai thiết kế db như thế nên rất hiếm gặp trường hợp bị treo như nêu trên.

    • @tranquochuywecommit
      @tranquochuywecommit  Год назад +1

      Thực tế gặp nhiều đấy em. Em làm đủ nhiều dự án sẽ thấy. Anh cũng đang tối ưu cho các khách hàng gặp vấn đề này

    • @namtongdosa9626
      @namtongdosa9626 Год назад +1

      hình như index không tự động được tạo trên foreign key bạn ạ, hình như dùng InnoDB thì nó mới tự động tạo

  • @uctuanvu2975
    @uctuanvu2975 Год назад +1

    Thường thì đánh khoá primary cho bảng con thì nó cũng sẽ mặc định đc index chứ nhỉ

    • @tranquochuywecommit
      @tranquochuywecommit  Год назад +1

      Trong thực tế, các cột được chọn làm Foreign key trên bảng con thường không phải là Primary Key anh em nhé.

    • @namtongdosa9626
      @namtongdosa9626 Год назад

      Primary thì index tự động được tạo rồi bạn
      còn foreign key chưa chưa hẳn

  • @namtongdosa9626
    @namtongdosa9626 Год назад

    Nếu bảng cha mình dùng DELETE CASCADE thì có bị treo (khi câu insert ở bảng con chưa commit/ rollback) không a?

  • @hungtuan3791
    @hungtuan3791 Год назад

    Anh có thể giải thích rõ hơn về việc tại sao trên bảng con không có index lại khiến bảng cha bị treo không ạ. Và bị treo cả bảng cha hay chỉ một vài row nhất định anh nhỉ ?. Em cảm ơn ạ

    • @tranquochuywecommit
      @tranquochuywecommit  Год назад

      Em có thể lên xem bài viết lý giải chi tiết trên wecommit.com.vn nhé

    • @hungtuan3791
      @hungtuan3791 Год назад

      @@tranquochuywecommit sáng nay e có thử lại theo thì sau lần đầu xoá bảng con thì bảng cha sẽ bị block. Nhưng sau khoảng 30p e thử lại cũng xoá dữ liệu ở bảng con thì bảng cha lại k bị block nữa. Vấn đề này là do đâu anh nhỉ ?

  • @vihtago
    @vihtago Год назад

    Cho e hỏi sâu về cơ chế nó làm cái gì v ạ?

    • @tranquochuywecommit
      @tranquochuywecommit  Год назад

      Các bài phân tích chuyên sâu hơn nữa, em có thể đọc ở dạng bài viết trên wecommit.com.vn nhé.

  • @seapea2002
    @seapea2002 Год назад

    e có vào web và thấy khóa học tối ưu của anh thì em muốn hỏi em mới là sinh viên năm 3, về mysql cũng chỉ biết cơ bản các câu lệnh thì có theo được khóa tối ưu không a

    • @tranquochuywecommit
      @tranquochuywecommit  Год назад

      Em inbox anh để anh hiểu hơn về em thì anh mới có thể giúp em tốt nhất nhé. Zalo anh: 0888549190

  • @nguyenngothuong
    @nguyenngothuong Год назад

    Lạy chúa em lấy data trên web về thực hành tầm 1tr dòng select cực lâu 😢😢😢

    • @tranquochuywecommit
      @tranquochuywecommit  Год назад

      Tối ưu bản chất là tư duy và nguyên lý. Anh tặng em link các nội dung về tối ưu (liên tục cập nhật): wecommit.com.vn/tong-hop-link-cac-bai-viet-hay-tren-trang-wecommit-com-vn/

  • @hungtiet5284
    @hungtiet5284 4 месяца назад +1

    cái quan trọng nhất là tại sao thì k có thấy noiis

    • @futhedude4848
      @futhedude4848 Месяц назад

      để bán khóa học mà bro :v

  • @hoanguyeninh4777
    @hoanguyeninh4777 Год назад

    A cho e hỏi chút e xem các bài viết của anh có áp dụng hầu như là demo với oracle thì phạm vi nó cũng có thể áp dụng với các hệ QTCSDL khác như mysql/posgresql được đúng không ạ. Vì hiện tại e chỉ làm việc với 2 thằng này thôi ạ. E cảm ơn!

    • @tranquochuywecommit
      @tranquochuywecommit  Год назад +1

      áp dụng thoải mái em ah. Tối ưu là tư duy và nguyên lý mà. Có rất nhiều anh em đang làm dự án với MySQL, PostgreSQL, SQLServer đang đồng hành cùng anh và đang áp dụng những bài viết tối ưu của anh trong dự án hiện tại. Trong nhiều bài viết anh cũng có demo để chứng minh nguyên lý có thể áp dụng với nhiều loại CSDL khác nhau.

    • @hoanguyeninh4777
      @hoanguyeninh4777 Год назад

      @@tranquochuywecommit Dạ vâng a. E cảm ơn ạ!

  • @dev.hoahai
    @dev.hoahai Год назад

    khoá học mình có chi phí bao nhiêu ạ

    • @tranquochuywecommit
      @tranquochuywecommit  Год назад

      Anh em đọc thông tin tại đây nhé wecommit.com.vn/chuong-trinh-dao-tao-toi-uu-co-so-du-lieu-wecommit/

  • @nguyenhuudungz
    @nguyenhuudungz Год назад

    Em thấy mysql ko bị treo.

    • @tranquochuywecommit
      @tranquochuywecommit  Год назад +2

      Trường hợp của em thì hệ thống đã tự động tạo Index trên FK rồi. Em thử kiểm tra trên hệ thống của mình thông tin Index có tạo chưa nhé.