Truy vấn mysql chậm trên bảng lớn

Đây là bài viết thứ hai trong loạt bài tối ưu hóa MySQL. Trong bài viết này, tôi sẽ đề cập đến cách tăng tốc tốc độ chọn, cải thiện hiệu suất truy vấn và cải thiện hiệu suất MySQL

Một số khái niệm ở đây sẽ tương tự như các khái niệm trong bài viết trước, vì vậy chúng tôi sẽ tóm tắt chúng và không xem xét lại chúng, trọng tâm chính của chúng tôi là cải thiện hiệu suất của truy vấn chọn MySQL

Bài viết này chỉ đề cập đến việc tối ưu hóa InnoDB, một công cụ lưu trữ MySQL. Mặc dù một số đề xuất ở đây sẽ hoạt động với MyISAM, nhưng bài viết này giả định việc sử dụng InnoDB cho các mẹo về tốc độ truy vấn mysql. [Và cũng cho máy chủ MariaDB và Percona cho MySQL, cơ sở dữ liệu chúng tôi sử dụng thường xuyên]

Lựa chọn máy chủ và phần cứng cho cơ sở dữ liệu máy chủ MySQL

Hãy xem phần này trong bài viết trước của chúng tôi [Mua máy chủ nhanh  Xem các mục từ bốn đến sáu];

Đo hiệu suất truy vấn MySQL

Đo lường hiệu suất của MySQL cũng đã được đề cập trong bài viết trước. Một tùy chọn khác là xem thời gian được MySQL báo cáo để thực hiện từng truy vấn [BTW SQL là viết tắt của Ngôn ngữ truy vấn tiêu chuẩn, trong trường hợp hiện tại vẫn chưa rõ], nhưng bạn cần đảm bảo rằng kết quả không được cung cấp từ bộ đệm truy vấn

Một “vấn đề” khác có thể liên quan đến bộ đệm có thể ảnh hưởng đến phép đo là bộ đệm của hệ điều hành. Nếu có đủ bộ nhớ, nó có thể lưu trữ các tệp thô của MySQL và làm sai lệch phép đo

Tạo một chỉ mục

Một chỉ mục là trái tim của mọi cơ sở dữ liệu quan hệ dựa trên SQL, hãy tạo một chỉ mục phù hợp và hiệu suất sẽ tốt

Nếu bạn là một chuyên gia MySQL, bạn có thể bỏ qua phần này, vì bạn có thể biết Index là gì và nó được sử dụng như thế nào

Chọn và quét toàn bộ bảng [chậm chậm chậm]

Để hiểu tại sao cần có các chỉ mục, chúng ta cần biết cách MySQL lấy dữ liệu

Giả sử chúng ta có một lược đồ bảng đơn giản

CREATE TABLE People [
Name VARCHAR[64],
Age int[3]
]

Chúng tôi muốn lấy tuổi của John, vì vậy chúng tôi thực hiện một lựa chọn đơn giản

Select Age from People where Name='John'

Điều đó sẽ hoạt động tốt miễn là chúng tôi có một lượng nhỏ dữ liệu, nhưng tốc độ truy vấn MySQL sẽ giảm khi bảng của chúng tôi phát triển

Lý do là MySQL sẽ cần quét mọi hàng trong bảng và so sánh Tên với 'John. ' Nó sẽ chỉ thoát khi tìm thấy nó hoặc không tìm thấy gì

Kiểm tra mọi hàng trong bảng được gọi là quét toàn bộ bảng, không có hiệu suất. Hãy nghĩ về một bảng có 1.000.000.000 hàng [chúng tôi có một số hàng trong kho lưu trữ dữ liệu của mình] và mọi truy vấn MySQL sẽ phải quét toàn bộ dữ liệu. Đó sẽ là điên chậm

Ví dụ: chúng tôi có một bảng có 300 triệu từ khóa. Đối với mục đích gỡ lỗi, thỉnh thoảng chúng tôi cần thực hiện quét toàn bộ bảng. Mất khoảng 5 phút để lấy dữ liệu của chúng tôi

Chỉ mục MySQL là gì?

Các chỉ mục cho phép truy xuất dữ liệu nhanh. Giống như mục lục trong danh bạ điện thoại [nếu bạn nhớ những mục đó], bạn sẽ tìm kiếm Tên và nó sẽ chỉ cho bạn trang có Tên đó

Có một số loại chỉ mục trong MySQL và mỗi loại có trường hợp sử dụng và hiệu suất riêng. Điều cần thiết là chọn đúng cho những gì chúng ta cần

Các loại chỉ mục MySQL

Khóa chính là gì?

Mỗi bảng nên có một khóa chính [trừ khi bạn biết mình đang làm gì]. Khóa chính có thể mở rộng trên nhiều cột, điều này đảm bảo rằng dữ liệu là duy nhất

Vì vậy, trong ví dụ của chúng tôi, nếu chúng tôi đặt khóa chính trên cột Tên, chúng tôi chỉ có thể có một tên 'John', nhưng chúng tôi cũng có thể có 'Beth' và 'Karen. ’

Ưu điểm của khóa chính là MySQL sắp xếp dữ liệu theo cách phù hợp với khóa và đó là khóa nhanh nhất xét về hiệu suất chọn lọc

Chỉ số không gian là gì?

Chỉ mục này dành cho các giá trị hình học và nó được sử dụng cho các mục đích liên quan đến bản đồ và GIS. Tôi chưa bao giờ làm việc trong lĩnh vực đó và chưa bao giờ sử dụng chỉ mục đó

Chỉ số duy nhất là gì?

Chỉ mục này giống như khóa chính ở chỗ nó đảm bảo rằng các cột là một phần của chỉ mục sẽ là duy nhất, nhưng không giống như khóa chính, việc quản lý chỉ mục này chiếm dung lượng và bộ nhớ

Đối với các chỉ mục lớn, bạn có thể cần một bộ nhớ đủ lớn để xử lý mọi thao tác. Tôi đã từng sử dụng phiên bản 16 GB và chỉ mục có 200 triệu hàng;

Chỉ số thông thường là gì?

Chỉ mục thông thường cho phép nhiều giá trị có cùng giá trị;

Chỉ mục toàn văn là gì?

Chỉ mục này cho phép chúng tôi lập chỉ mục các chuỗi con bên trong một cột chuỗi. Điều này hữu ích cho các tìm kiếm chuỗi ký tự đại diện

Chỉ số giảm dần là gì?

Đây là các chỉ mục thông thường, nhưng thứ tự sắp xếp của chúng bị đảo ngược. Điều này được hỗ trợ bởi MySQL 8 [dù sao bạn cũng nên sử dụng] và rất hữu ích để xử lý dữ liệu mới trước

Tôi có nên sử dụng chỉ mục trên một hoặc nhiều hàng không?

Có thể đặt chỉ mục hoặc khóa chính trên nhiều hàng. Làm như vậy cho phép chúng tôi sử dụng cùng một chỉ mục nếu chúng tôi định đặt nhiều hàng trong mệnh đề where

Nếu chúng ta đặt một chỉ mục riêng cho mỗi hàng, kế hoạch thực thi MySQL sẽ tìm tất cả các kết quả từ mỗi mệnh đề where và sau đó chỉ tìm những kết quả khớp với tất cả các chỉ mục

Tìm kiếm tất cả các kết quả và sau đó hợp nhất chúng đồng nghĩa với việc lãng phí rất nhiều tài nguyên. Sử dụng cùng một chỉ mục trên nhiều hàng, kế hoạch thực thi MySQL sẽ chỉ tìm thấy kết quả từ hàng đầu tiên và sau đó nó sẽ chỉ lọc những kết quả đó bằng cách sử dụng mệnh đề where ở hàng thứ hai. Và cứ như vậy cho nhiều hàng hơn

Hạn chế của một chỉ mục trên nhiều hàng là kích thước chỉ mục, đôi khi một chỉ mục có thể trở nên khá lớn, như có thể thấy trong hình bên dưới [được chụp bằng phpmyadmin]

Lược đồ bảng cơ sở dữ liệu MySQL DDL

Trong các đoạn tiếp theo, chúng ta sẽ thảo luận về một lược đồ bảng, vì vậy đây là

CREATE TABLE Search [
SearchID BigInt,
Keyword Varchar[64]
PRIMARY KEY [SearchID]
INDEX idxKeyword [Keyword]
]

Bảng thử nghiệm của chúng tôi có 300 triệu bản ghi. [DDL là viết tắt của Ngôn ngữ định nghĩa dữ liệu]

Kiểm tra xem các lựa chọn của bạn đang hoạt động như thế nào

Thêm chỉ mục và khóa chính không có nghĩa là MySQL sẽ sử dụng chúng, MySQL có logic riêng về cách sử dụng chỉ mục cho một truy vấn nhất định. Đối với các truy vấn chậm hoặc đang chạy nhiều lần, bạn nên kiểm tra xem điều gì xảy ra bên trong

Cách bạn làm là với lệnh 'giải thích. ’ Bạn đặt nó trước lệnh SQL của mình và MySQL cho bạn biết các kế hoạch thực hiện, cho phép bạn xem nó ảnh hưởng như thế nào đến tốc độ truy vấn của MySQL

Kế hoạch thực hiện truy vấn

Mục tiêu chính của cơ sở dữ liệu là lưu trữ dữ liệu và có thể truy xuất dữ liệu nhanh chóng

Trước khi MySQL chạy một truy vấn, nó cần tìm kế hoạch thực hiện tốt nhất cho truy vấn đó

  • Chỉ số nào để sử dụng
  • Thứ tự của chỉ mục để sử dụng
  • Nếu sử dụng phép nối, việc nào cần làm trước
  • Vân vân

Đối với các truy vấn, muốn tối ưu chúng ta cần kiểm tra kế hoạch thực hiện [hay còn gọi là Query Plan]. Lý do là những gì chúng tôi nghĩ là đúng cách có thể không phải là đúng cách cho MySQL.
Hơn nữa, các chỉ mục của chúng tôi có thể không sử dụng được cho truy vấn chúng tôi đang chạy.

Giải thích về khóa chính

Ví dụ: hãy giải thích câu lệnh SQL sau

explain SELECT * FROM `Search` where SearchID=1

SearchID là khóa chính;

+----+-------------+--------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table  | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+--------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | Search | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |100.00    | NULL  |
+----+-------------+--------+------------+-------+---------------+---------+---------+-------+------+----------+-------+

Như chúng ta có thể thấy, MySQL sử dụng khóa chính để thực hiện lựa chọn và sẽ chỉ sử dụng một hàng

Giải thích không có khóa chính

Bây giờ, hãy chọn một hàng không có khóa chính

explain SELECT * FROM `Search` as Search where Results=1;

Kết quả cột không có chỉ mục hoặc khóa chính và kết quả là

+----+-------------+--------+------------+------+---------------+------+---------+------+-----------+----------+-------------+
| id | select_type | table  | partitions | type | possible_keys | key  | key_len | ref  | rows      | filtered | Extra       |
+----+-------------+--------+------------+------+---------------+------+---------+------+-----------+----------+-------------+
|  1 | SIMPLE      | Search | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 245410801 |    10.00 | Using where |
+----+-------------+--------+------------+------+---------------+------+---------+------+-----------+----------+-------------+

Quét toàn bộ bảng sẽ rất chậm

Giải thích cho chỉ số

Quá trình tiếp theo của chúng tôi là thực hiện chọn trên một hàng có chỉ mục

explain SELECT * FROM `Search` as Search where Keyword='test';

Và kết quả là

________số 8

MySQL sẽ xử lý 49082 hàng, nhưng hãy xem chúng ta thực sự có bao nhiêu hàng

SELECT count[*] FROM `Search` as Search where Keyword='test';

Và kết quả là

Select Age from People where Name='John'
0

Có ít hàng hơn so với những gì giải thích cho thấy. Điều này có thể là do cách MySQL quản lý các chỉ mục, nhưng nó vẫn đủ nhanh và không quét toàn bộ bảng

Kiểm tra mệnh đề where cho truy vấn MySQL

Mệnh đề where là một trong những phần quan trọng nhất của mọi truy vấn chọn vì đó là mục đích của cơ sở dữ liệu. lấy dữ liệu cụ thể và nhanh chóng

Điều này có nghĩa là bạn cần đảm bảo rằng các cột được chọn với mệnh đề where được lập chỉ mục hoặc nhỏ để quá trình quét diễn ra nhanh chóng.

Tối ưu hóa chỉ mục MySQL cho mệnh đề where phức tạp

Đoạn 'giải thích' bao gồm một vài ví dụ với chỉ mục trong mệnh đề where, nhưng đó là những ví dụ đơn giản. Hãy hiển thị một ví dụ khác trong đó chúng tôi sử dụng cả khóa chính và chỉ mục

Select Age from People where Name='John'
1

Kết quả là

Select Age from People where Name='John'
2

Điều này là tốt;

Không có lựa chọn chỉ mục với tính toán trên một ví dụ SQL cột

Hãy cố gắng làm rối nó lên

Select Age from People where Name='John'
3

Trong ví dụ này, chúng tôi đang thực hiện phép tính trên cột có khóa chính;

Select Age from People where Name='John'
4

Nó đã thực hiện quét toàn bộ bảng, mặc dù chúng tôi có khóa chính. Cách giải quyết là thêm một trường được tính toán trước, lập chỉ mục cho nó và sử dụng trường chỉ mục đó trong mệnh đề where

Loại chỉ mục sai

Hãy thực hiện chọn ký tự đại diện trên một cột được lập chỉ mục

Select Age from People where Name='John'
5

Chúng tôi đang tìm kiếm bất kỳ từ khóa nào có chữ 'a' bên trong và MySQL thực hiện điều này

Select Age from People where Name='John'
6

Để quét toàn bộ bảng, trong trường hợp này, chúng tôi cần thêm chỉ mục toàn văn vào cột ‘Từ khóa. ’

Tối ưu hóa thứ tự và lựa chọn cột chỉ mục

Ở đây chúng tôi thực hiện một đơn đặt hàng bằng cách sử dụng khóa chính của mình, khóa này cũng nằm trong mệnh đề where

Select Age from People where Name='John'
7

Kết quả là

Select Age from People where Name='John'
8

Điều đó có nghĩa là MySQL đã sử dụng khóa chính, bây giờ hãy sử dụng chỉ mục làm hệ số sắp xếp

Select Age from People where Name='John'
9

Lần này chúng ta có một bất ngờ nho nhỏ

CREATE TABLE Search [
SearchID BigInt,
Keyword Varchar[64]
PRIMARY KEY [SearchID]
INDEX idxKeyword [Keyword]
]
0

MySQL không sử dụng chỉ mục của chúng tôi;

Không có chỉ mục trên truy vấn tham gia bảng

Khi thực hiện liên kết giữa một hoặc nhiều bảng [tất cả các loại liên kết. tham gia bên trong, tham gia trái, tham gia phải, v.v. ], đảm bảo rằng cột tham gia mà bạn tham gia được lập chỉ mục. Nếu không, MySQL sẽ cần thực hiện quét toàn bộ bảng để thực hiện phép nối phù hợp

Làm thế nào bạn có thể biết nếu đây là trường hợp? . Bây giờ bạn nên là một chuyên gia về việc sử dụng nó. 😊

Cấu hình hiệu suất MySQL cao

MySQL out of the box cấu hình khiêm tốn và được thiết kế để hỗ trợ các hoạt động cho các trang web như WordPress

Để đạt được hiệu suất mà bạn mong đợi từ cơ sở dữ liệu hiện đại, bạn sẽ cần tinh chỉnh và điều chỉnh cấu hình mặc định

Các cài đặt nằm trong tệp my. cnf. Trong trường hợp của centos, nó nằm dưới /etc/my. cnf

Mẹo điều chỉnh cho cơ sở dữ liệu MySQL của bạn

innodb_buffer_pool_size

Cá nhân tôi tin rằng đây là cài đặt quan trọng nhất của MySQL và nó đặt dung lượng bộ nhớ mà MySQL sử dụng để lưu trữ bảng và dữ liệu chỉ mục. Các cài đặt phải là 75% bộ nhớ vì kích thước không được đặt cố định và MySQL có thể được phân bổ thêm 10% kích thước đã đặt

Ngoài ra, bạn có thể có các ứng dụng khác đang chạy, vì vậy bạn cần dành bộ nhớ cho chúng

Tôi đã giúp một người bạn [chính là người mà tôi đã viết về] và điều đầu tiên tôi kiểm tra ngay cả trước khi cấu trúc bảng là bộ nhớ được cấp phát cho MySQL. Đó là mặc định, là 2GB trên máy của anh ấy. Thay đổi nó thành 48GB tăng hiệu suất đáng kể

innodb-buffer-pool-instance

Số lượng phiên bản vùng đệm được chia thành, điều này là để cho phép xử lý đồng thời tốt hơn với các luồng. Nó chỉ phù hợp nếu vùng đệm lớn hơn 1. 3GB

Trên Windows 32bit, mặc định là kích thước vùng đệm chia cho 128MB. Trên tất cả các hệ thống khác, mặc định là 8

Với bộ xử lý AMD mới, bạn có thể có 64 hoặc 128 lõi và bạn có thể thử nghiệm với giá trị này để xem liệu bạn có đạt được hiệu suất tốt hơn không

tham gia_buffer_size

Cài đặt này cho MySQL biết lượng bộ nhớ cần phân bổ cho bộ đệm nối, được sử dụng trong khi tạo các phép nối

Nếu dữ liệu tham gia quá lớn, MySQL sẽ sử dụng bảng tạm thời trên ổ cứng

Giá trị mặc định là 256KB;

Giá trị này cũng tương đối nhỏ vì các mối nối phải nhỏ, vì vậy trước khi tăng giá trị này, hãy kiểm tra xem thiết kế có đúng không và có thể thay đổi thiết kế là một lựa chọn tốt hơn

Một tùy chọn khác là "gợi ý" trình tối ưu hóa trước một truy vấn có liên kết lớn

Bạn có thể đọc về cài đặt này trong tài liệu kỹ thuật MySQL. https. // nhà phát triển. mysql. com/doc/refman/8. 0/vi/máy chủ-hệ-thống-biến. html#sysvar_join_buffer_size

Tối ưu hóa bảng MySQL

Các bảng MySQL xuống cấp sau khi chèn dữ liệu vào chúng, đó là lý do tại sao có một tùy chọn để tối ưu hóa bảng, cú pháp là

CREATE TABLE Search [
SearchID BigInt,
Keyword Varchar[64]
PRIMARY KEY [SearchID]
INDEX idxKeyword [Keyword]
]
1

Thông thường, MySQL sẽ tạo một bảng mới, chèn tất cả dữ liệu vào bảng mới và xây dựng lại các chỉ mục khi hoàn tất

Tối ưu hóa bảng tốn nhiều thời gian và bạn cần đảm bảo rằng bạn có đủ dung lượng trên máy chủ cho bảng tạm thời. Nhiều lần, tôi bị hỏng cơ sở dữ liệu sau khi không có đủ dung lượng. Sau khi bảng được tối ưu hóa, bạn sẽ mong đợi tốc độ truy vấn MySQL và tốc độ chèn MySQL tốt hơn

Nếu bạn không chèn dữ liệu sau khi tối ưu hóa bảng, thì không cần phải tối ưu hóa lại

Tối ưu hóa truy vấn với các gợi ý

Vì chúng tôi biết rõ nhất cách chúng tôi muốn truy cập dữ liệu của mình nên chúng tôi có thể tùy chỉnh truy vấn của mình bằng các gợi ý tối ưu hóa

Có rất nhiều gợi ý và không thể bao gồm tất cả, bạn có thể xem tất cả tại đây. https. // nhà phát triển. mysql. com/doc/refman/8. 0/vi/gợi ý trình tối ưu hóa. html

Tài liệu này bao gồm các gợi ý chúng tôi đã sử dụng và có kinh nghiệm với

Gợi ý trình tối ưu hóa thời gian thực thi câu lệnh cho phép chúng tôi giới hạn thời gian thực hiện của một truy vấn. Giới hạn thời gian thực hiện là điều cần thiết vì một số truy vấn quá dài

Ví dụ: trong máy chủ sản xuất của chúng tôi là khi hợp nhất số lượng chỉ mục và kết quả trả về một triệu hàng trở lên

Trong một số điều kiện nhất định, những truy vấn đó có thể quá dài và chúng tôi thà chấm dứt chúng, cách thực hiện là

CREATE TABLE Search [
SearchID BigInt,
Keyword Varchar[64]
PRIMARY KEY [SearchID]
INDEX idxKeyword [Keyword]
]
2

1000 là mili giây để nó cho phép tối đa một giây

Cú pháp gợi ý cài đặt biến

Chúng ta có thể muốn sử dụng một giá trị khác cho biến toàn cục của MySQL, chẳng hạn, chúng ta có thể muốn có bộ đệm sắp xếp lớn hơn chỉ dành cho một truy vấn cụ thể, chúng ta có thể làm như thế này

CREATE TABLE Search [
SearchID BigInt,
Keyword Varchar[64]
PRIMARY KEY [SearchID]
INDEX idxKeyword [Keyword]
]
3

SQL_CALC_FOUND_ROWS

Cờ này cho MySQL biết rằng chúng tôi muốn biết số lượng kết quả mà truy vấn trả về, điều này giúp chúng tôi tiết kiệm thời gian để thực hiện hai truy vấn, một cho số lượng [*] và cho dữ liệu thực tế [và do đó tăng tốc truy vấn cơ sở dữ liệu MySQL]. Tôi ước tôi biết nó một năm trước

Một ví dụ sẽ là

CREATE TABLE Search [
SearchID BigInt,
Keyword Varchar[64]
PRIMARY KEY [SearchID]
INDEX idxKeyword [Keyword]
]
4

Sau đó, để có được giá trị bạn có thể thực hiện

CREATE TABLE Search [
SearchID BigInt,
Keyword Varchar[64]
PRIMARY KEY [SearchID]
INDEX idxKeyword [Keyword]
]
5

Để có được dữ liệu. Giá trị được trả về sẽ phản ánh tổng dữ liệu có sẵn bất kể giới hạn có được sử dụng hay không

OLTP so với OLAP

Có hai mô hình thiết kế cho thiết kế cơ sở dữ liệu

  1. OLTP – Xử lý giao dịch trực tuyến
  2. OLAP – Xử lý phân tích trực tuyến

OLTP là gì

OLTP là một thiết kế với mục tiêu cung cấp cả tốc độ chèn và chọn cũng như độ tin cậy, cách sử dụng cổ điển sẽ là quản lý dữ liệu của năm hiện tại trong ngân hàng

  • Khách hàng có thể xem các giao dịch của họ
  • Ngân hàng có thể chèn hồ sơ mới
  • Ngân hàng có thể xóa hoặc sửa đổi hồ sơ hiện có

Một số khái niệm thiết kế được sử dụng trong OLTP

  • Chuẩn hóa dữ liệu – Chia dữ liệu thành các bảng nhỏ hơn cho phép lưu trữ dữ liệu nhỏ hơn và thực hiện ít thao tác chèn hơn. Khi truy vấn dữ liệu, một hoặc nhiều liên kết được sử dụng
  • Giao dịch – Điều này cho phép khôi phục trong trường hợp có sự cố và giữ các hành động khác nhau dưới dạng một đơn vị nguyên tử
  • Giữ tính toàn vẹn tham chiếu bằng cách sử dụng tổ hợp khóa chính/khóa ngoại cho phép bảo vệ chống lại lỗi chèn/xóa dữ liệu

OLAP là gì

OLAP là một thiết kế với mục tiêu chỉ cung cấp các thao tác được chọn và không có thao tác xóa/cập nhật/chèn. Cách sử dụng cổ điển sẽ là quản lý dữ liệu của một năm đã trôi qua trong ngân hàng

  • Khách hàng có thể xem hồ sơ của họ
  • Hồ sơ không thể thay đổi được nữa. Dữ liệu chỉ được đọc

Một số khái niệm thiết kế của OLAP

  • Dữ liệu không được chuẩn hóa nhưng được lưu trong một đốm màu dưới dạng một dòng dài
  • Không phải là ý tưởng thiết kế, nhưng để tiết kiệm chi phí, dữ liệu rất có thể sẽ được lưu trên ổ cứng cơ học, điều đó có nghĩa là thiết kế phải nhanh cho các thao tác được chọn
  • Cơ sở dữ liệu chứa các bảng tóm tắt, để tiết kiệm thời gian, số liệu thống kê và thông tin khác được tính toán trong giờ nghỉ và được lưu trữ để truy xuất nhanh

Cái nào để chọn?

Thiết kế phù hợp có thể tạo ra hoặc phá vỡ cơ sở dữ liệu. Cũng có thể dữ liệu sẽ có hai vòng đời. Chu kỳ đầu là OLTP, khi không đổi được nữa thì chuyển sang OLAP

Tiêu chí lựa chọn là

  • Dữ liệu có ở dạng chỉ đọc không?
  • Dữ liệu có được đọc và ghi không?
  • Dữ liệu có thể được phân vùng thành cả chỉ đọc và đọc và ghi không?

Thậm chí nhiều cách hơn để tối ưu hóa các truy vấn MySQL

Chúng tôi đã tạo phần thứ hai của hướng dẫn này với nhiều mẹo và cách hơn nữa để tối ưu hóa cơ sở dữ liệu MySQL của bạn, bạn có thể đọc nó tại đây. Còn nhiều cách tăng tốc độ truy vấn MySQL và giảm tốc độ chạy [phần 2]

Tóm lược

Trong hướng dẫn này, chúng tôi bắt đầu đề cập đến một số khía cạnh về cách tối ưu hóa tốc độ và hiệu suất truy vấn MySQL, trong hướng dẫn tiếp theo, chúng tôi sẽ đề cập đến nhiều chủ đề hơn như Tối ưu hóa bảng, cài đặt bộ nhớ, v.v.

Tại sao truy vấn MySQL của tôi quá chậm?

Các truy vấn có thể trở nên chậm vì nhiều lý do khác nhau, từ việc sử dụng chỉ mục không đúng cách cho đến các lỗi trong chính công cụ lưu trữ . Tuy nhiên, trong hầu hết các trường hợp, các truy vấn trở nên chậm chạp do các nhà phát triển hoặc quản trị viên cơ sở dữ liệu MySQL bỏ qua việc theo dõi và theo dõi hiệu suất của chúng.

Kích thước bảng có ảnh hưởng đến tốc độ truy vấn không?

Kích thước bảng. Nếu truy vấn của bạn chạm vào một hoặc nhiều bảng có hàng triệu hàng trở lên, điều đó có thể ảnh hưởng đến hiệu suất . tham gia. Nếu truy vấn của bạn kết hợp hai bảng theo cách làm tăng đáng kể số lượng hàng của tập kết quả, thì truy vấn của bạn có thể bị chậm.

Làm thế nào lớn là quá lớn cho một bảng MySQL?

Biểu diễn bên trong của bảng MySQL có giới hạn kích thước hàng tối đa là 65.535 byte , ngay cả khi công cụ lưu trữ có khả năng hỗ trợ lớn hơn .

Làm cách nào để cải thiện tốc độ truy vấn MySQL?

Điều chỉnh kích thước và thuộc tính của vùng bộ nhớ mà MySQL sử dụng để lưu trữ. Với việc sử dụng hiệu quả nhóm bộ đệm InnoDB, bộ đệm khóa MyISAM và bộ đệm truy vấn MySQL, các truy vấn lặp lại sẽ chạy nhanh hơn vì kết quả được truy xuất từ ​​bộ nhớ lần thứ hai và các lần tiếp theo

Chủ Đề