Hướng dẫn relational database mysql - cơ sở dữ liệu quan hệ mysql

Bài viết này hướng đến những người có ý tưởng chung về cơ sở dữ liệu MySQL, ví dụ (bảng, cột) và có thể thực hiện các câu lệnh chọn nhưng lại bị mắc kẹt khi cố gắng thiết lập lược đồ cơ sở dữ liệu.

Nội dung chính ShowShow

  • Tổng quan
  • Tạo lược đồ cơ sở dữ liệu
  • Bình thường hóa
  • Lược đồ cơ sở dữ liệu MySQL
  • Kỹ thuật tối ưu hóa chung
  • Sử dụng các chỉ mục và làm quen với giải thích
  • Thủ tục lưu trữ
  • Khử quy tắc bằng cách sử dụng các kích hoạt
  • Hiển thị danh sách quy trình
  • Nhật ký truy vấn chậm
  • Chìa khóa thay thế
  • Truy vấn bộ nhớ cache
  • Bộ nhớ vật lý
  • Sự kết luận
  • Làm thế nào bạn có thể tạo một cơ sở dữ liệu quan hệ?
  • MYSQL bảng quan hệ là gì?
  • Tại sao MySQL là cơ sở dữ liệu quan hệ?

Làm thế nào để bạn cấu trúc cơ sở dữ liệu bằng cách chia dữ liệu thành các bảng riêng biệt (cơ sở dữ liệu quan hệ) và hình thành mối quan hệ giữa chúng bằng cách sử dụng các chỉ mục và sau đó xây dựng các truy vấn chọn bằng cách tham gia các bảng để truy xuất dữ liệu của bạn?

Tổng quan

Tạo lược đồ cơ sở dữ liệu

Tạo lược đồ cơ sở dữ liệu

Bình thường hóacreate tables to help break up all our data as this builds a structure and makes it a lot easier to manage and understand what is going on.

Bình thường hóa

Lược đồ cơ sở dữ liệu MySQLwould like to collect for your database.

Kỹ thuật tối ưu hóa chung

dogName
dogDescr
dogBreed
dogBreedDescr
dogRfidMicroChipBarCode
dogRfidDate
dogBreederName
dogBreederAddress
dogBreederPhone

.etc..

Sử dụng các chỉ mục và làm quen với giải thíchforms/steps to this process.

Thủ tục lưu trữ

Khử quy tắc bằng cách sử dụng các kích hoạt

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);

Hiển thị danh sách quy trình

Nhật ký truy vấn chậm

Chìa khóa thay thế

Truy vấn bộ nhớ cache

Bộ nhớ vật lý

Sự kết luận

Lược đồ cơ sở dữ liệu MySQL

Kỹ thuật tối ưu hóa chungtables so you can then perform table joins to know things such as:

  • Sử dụng các chỉ mục và làm quen với giải thích
  • Thủ tục lưu trữ

Khử quy tắc bằng cách sử dụng các kích hoạt

Hiển thị danh sách quy trình

Nhật ký truy vấn chậm

Chìa khóa thay thế

Truy vấn bộ nhớ cache

Bộ nhớ vật lý

Sự kết luậnhence the one to one relationship between the tables.

Làm thế nào bạn có thể tạo một cơ sở dữ liệu quan hệ?insert the primary dog id and form the relationship between the two tables:

CREATE TABLE dog
(
  id int(11) NOT NULL auto_increment,
  name varchar(255),
  descr text,
  size enum('small','medium','large'),
  date timestamp(14),
  PRIMARY KEY (id)
);

INSERT INTO dog (name,descr,size,date) VALUES('Max','Its distinctive appearance and deep foghorn voice make it stand out in a crowd.','medium',NOW());
INSERT INTO dog (name,descr,size,date) VALUES('Jake','It loves human companionship and being part of the group.','medium',NOW());
INSERT INTO dog (name,descr,size,date) VALUES('Buster','Short-legged but surprisingly strong and agile.','small',NOW());


CREATE TABLE rfid_dog
(
  dog_id int(11) NOT NULL,
  bar_code varchar(128) NOT NULL,
  notes text,
  iso_compliant enum('y','n') DEFAULT 'n',
  date timestamp(14),
  PRIMARY KEY (dog_id)
);

INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('1','234k34340ll2342323022','This is a RFID tag for the Max','y',NOW());
INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('2','09383638920290397d829','This is a RFID tag for the Jake','y',NOW());
INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('3','30id8383837210jndal20','This is a RFID tag for the Buster','y',NOW());

Vì vậy, để có được một danh sách các con chó cùng với vi mạch RFID tương ứng của chúng, bạn sẽ cần phải thực hiện tham gia bảng trên dog.id = rfid_dog.dog_id cho hai bảng sử dụng mối quan hệ một-một như SO:tables using a one-to-one relationship like so: tables using a one-to-one relationship like so:

SELECT dog.id, dog.name, rfid_dog.bar_code AS rfid
FROM dog,rfid_dog
WHERE dog.id = rfid_dog.dog_id
ORDER BY dog.name ASC;

+----+--------+-----------------------+
| id | name   | rfid                  |
+----+--------+-----------------------+
|  3 | Buster | 30id8383837210jndal20 |
|  2 | Jake   | 09383638920290397d829 |
|  1 | Max    | 234k34340ll2342323022 |
+----+--------+-----------------------+
3 rows in set (0.00 sec)
Một đến nhiều

Trong loại mối quan hệ này, bạn xác định bảng đại diện cho nhiều mặt của mối quan hệ và thêm khóa chính của bảng một bên vào nó.

Vì vậy, trong trường hợp này, nhiều con chó thuộc về một giống chó do đó chúng tôi thêm Field Breed_id vào bàn chó và thực hiện một bàn tham gia trên chó.breed_id = Breed.id để lấy chó và giống tương ứng của chúng.perform a table join on dog.breed_id = breed.id to retrieve dogs and their corresponding breed. perform a table join on dog.breed_id = breed.id to retrieve dogs and their corresponding breed.

Vì vậy, hãy tạo bảng giống, chèn một số bản ghi, thay đổi bảng chó thêm Breed_id sau đó cập nhật tất cả những con chó với ID giống tương ứng của chúng - Tôi đã cố tình bỏ qua một chỉ mục trên Breed_id (xem ví dụ sử dụng các chỉ mục dưới đây):

CREATE TABLE breed
(
  id int(11) NOT NULL auto_increment,
  name varchar(255),
  descr text,
  date timestamp(14),
  PRIMARY KEY (id)
);

INSERT INTO breed (name,descr,date) VALUES('Hounds','One of the oldest groups of dog originating thousands of years ago.',NOW());
INSERT INTO breed (name,descr,date) VALUES('Terrier','A tough, no-nonsense, rabbiting and badgering dog.',NOW());

ALTER TABLE dog
ADD breed_id int(11) AFTER date;

EXPLAIN dog;

+----------+--------------------------------+------+-----+-------------------+----------------+
| Field    | Type                           | Null | Key | Default           | Extra          |
+----------+--------------------------------+------+-----+-------------------+----------------+
| id       | int(11)                        | NO   | PRI | NULL              | auto_increment |
| name     | varchar(255)                   | YES  |     | NULL              |                |
| descr    | text                           | YES  |     | NULL              |                |
| size     | enum('small','medium','large') | YES  |     | NULL              |                |
| date     | timestamp                      | NO   |     | CURRENT_TIMESTAMP |                |
| breed_id | int(11)                        | YES  |     | NULL              |                |
+----------+--------------------------------+------+-----+-------------------+----------------+
6 rows in set (0.00 sec)

UPDATE dog SET breed_id = '1' WHERE id = '1';
UPDATE dog SET breed_id = '1' WHERE id = '2';
UPDATE dog SET breed_id = '2' WHERE id = '3';

Để có được một danh sách các con chó và giống chó của chúng, chúng tôi thực hiện một bảng tham gia trên Dog.Breed_id = Breed.id cho hai bảng sử dụng mối quan hệ một-nhiều như SO:

SELECT dog.id,dog.name,breed.name AS breed
FROM dog,breed
WHERE dog.breed_id = breed.id
ORDER BY dog.name ASC;

+----+--------+---------+
| id | name   | breed   |
+----+--------+---------+
|  3 | Buster | Terrier |
|  2 | Jake   | Hounds  |
|  1 | Max    | Hounds  |
+----+--------+---------+
3 rows in set (0.00 sec)
Nhiều nhiều

Một mối quan hệ đa giá trị theo cả hai hướng là một mối quan hệ nhiều đến nhiều. Một nhà lai tạo có thể có nhiều hơn một con chó, và một con chó có thể có nhiều hơn một người gây giống.

Kiểu mối quan hệ này được giúp đỡ bằng cách sử dụng một giống bảng liên kết__breeder.

Vì vậy, trước tiên, hãy tạo một bảng cho các nhà lai tạo của chúng tôi, chèn một số bản ghi, sau đó tạo một bảng liên kết có tên Breed__breeder sẽ giúp chúng tôi tham gia mối quan hệ giữa hai bảng giống và nhà lai tạo, sau đó chèn ID chính hiện tại của cả hai giống và nhà lai tạo của chúng để chúng tôi có thể làm mối quan hệ công việc:

CREATE TABLE breeder
(
  id int(11) NOT NULL auto_increment,
  name varchar(255),
  address text,
  state varchar(10),
  city varchar(40),
  phone varchar(28),
  email varchar(28),
  date timestamp(14),
  PRIMARY KEY (id)
);

INSERT INTO breeder (name,address,state,city,phone,email,date) VALUES('Joe Bloggs','23 Smith St','NSW','Sydney','02 7875 4545','[email protected]',NOW());
INSERT INTO breeder (name,address,state,city,phone,email,date) VALUES('Tom Smith','11 Tucker St','QLD','Brisbane','07 023 2343','[email protected]',NOW());


CREATE TABLE breed__breeder
(
  breed_id int(11) DEFAULT '0' NOT NULL,
  breeder_id int(11) DEFAULT '0' NOT NULL,
  PRIMARY KEY (breed_id, breeder_id)
);

INSERT INTO breed__breeder (breed_id,breeder_id) VALUES('1','1');
INSERT INTO breed__breeder (breed_id,breeder_id) VALUES('2','1');
INSERT INTO breed__breeder (breed_id,breeder_id) VALUES('1','2');

Để có được một danh sách các nhà lai tạo và những con chó nào họ sinh sản, chúng tôi thực hiện một bảng tham gia trên Breed__breeder.breed_id = Breed.id và Breed__breeder.breeder_id = breeder.id cho ba bảng sử dụng mối quan hệ nhiều đến như SO:

SELECT breeder.name,breeder.address,breeder.phone,breeder.email,breed.name AS breedName
FROM breed,breeder,breed__breeder
WHERE breed__breeder.breed_id = breed.id
AND breed__breeder.breeder_id = breeder.id
ORDER BY breeder.name ASC;

+------------+--------------+--------------+---------------+-----------+
| name       | address      | phone        | email         | breedName |
+------------+--------------+--------------+---------------+-----------+
| Joe Bloggs | 23 Smith St  | 02 7875 4545 | [email protected] | Hounds    |
| Joe Bloggs | 23 Smith St  | 02 7875 4545 | [email protected] | Terrier   |
| Tom Smith  | 11 Tucker St | 07 023 2343  | [email protected] | Hounds    |
+------------+--------------+--------------+---------------+-----------+
3 rows in set (0.02 sec)

Và ở đó, bạn đã tạo ra một cơ sở dữ liệu quan hệ MySQL sử dụng một đến một, một và nhiều với nhiều mối quan hệ giữa các bảng.

Kỹ thuật tối ưu hóa chung

Sử dụng các chỉ mục và làm quen với giải thích

Luận văn hai điểm là khía cạnh quan trọng nhất để tối ưu hóa cơ sở dữ liệu của bạn.

Chỉ mục

Khi nói về việc xác định các phím cho một bảng, nó rất giống như nói về một chỉ mục trong một cuốn sách. Như với một chỉ mục trong một cuốn sách, bạn chỉ cần tìm đến chỉ mục để nhanh chóng tìm thấy thông tin nào bạn sau khi quét qua toàn bộ trang sách một lúc. Điều tương tự có thể được nói khi bạn tạo các chỉ mục trên bảng trong cơ sở dữ liệu của bạn.look to the index to quickly find what information you after instead of scanning through the whole book page at a time. The same can be said for when you create indexes on a table in your database. look to the index to quickly find what information you after instead of scanning through the whole book page at a time. The same can be said for when you create indexes on a table in your database.

Sử dụng giải thích

Để truy xuất bất kỳ thông tin hữu ích nào về các truy vấn của bạn, bạn sẽ cần phải ném giải thích trước nó sẽ cung cấp cho bạn một loạt các thông tin hữu ích:

  • Bảng - Bảng nào được sử dụng trong truy vấn
  • Loại - Tham gia loại. Các giá trị có thể là hệ thống, const, eq_ref, ref, phạm vi, chỉ mục, tất cả
  • Khóa có thể - Tất cả các phím có thể được sử dụng cho các chỉ mục
  • Khóa - khóa thực sự được sử dụng cho chỉ mục
  • Độ dài khóa - Khóa ngắn hơn tốt hơn
  • Tham khảo - Các cột khác được sử dụng với khóa để có được kết quả
  • Hàng - số lượng hàng từ nơi dữ liệu sẽ đến
  • Thêm - Thông tin bổ sung. Một số giá trị có thể sử dụng chỉ mục, sử dụng ở đâu, sử dụng tạm thời, sử dụng filesort

Hãy để kiểm tra điều này trên cơ sở dữ liệu hiện tại của chúng tôi và xem những thông tin hữu ích mà nó cung cấp cho chúng tôi. Lấy ví dụ như truy vấn chọn sau:

SELECT dog.id,dog.name,breed.name AS breed
FROM dog,breed
WHERE dog.breed_id = breed.id
AND breed.id = 1;

+----+------+--------+
| id | name | breed  |
+----+------+--------+
|  1 | Max  | Hounds |
|  2 | Jake | Hounds |
+----+------+--------+
2 rows in set (0.00 sec)

Bằng cách sử dụng giải thích trước truy vấn chọn lọc của chúng tôi, chúng tôi có thể xem xét rất nhiều thông tin hữu ích sẽ giúp chúng tôi tối ưu hóa nó. Hãy lưu ý cho một trên trường ‘Loại, trên bảng chó đã được trả về‘ tất cả, điều đó có nghĩa là nó đã phải thực hiện quét bảng hoàn chỉnh trên tất cả các hàng, không tìm thấy chỉ mục nào! Điều này được phản ánh trong số lượng hàng được trả về quá mà tổng số 4: 4:

EXPLAIN SELECT dog.id,dog.name,breed.name AS breed
FROM dog,breed
WHERE dog.breed_id = breed.id
AND breed.id = 1;

+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref   | rows | Extra       |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
|  1 | SIMPLE      | breed | const | PRIMARY       | PRIMARY | 4       | const |    1 |             |
|  1 | SIMPLE      | dog   | ALL   | NULL          | NULL    | NULL    | NULL  |    3 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
2 rows in set (0.00 sec)

Cho rằng chúng tôi biết rằng không có chỉ số nào có sẵn trên bảng chó nhưng một sự tham gia rõ ràng (dog.breed_id = breed.id) giữa hai bảng cho phép tạo một trên breed_id:

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);
0

Bây giờ hãy chạy lại truy vấn và xem những gì tối ưu hóa đã xảy ra, -2 hàng được trả về và không có quét bảng đầy đủ trên bảng chó :):

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);
1

Tôi biết số lượng nhỏ nhưng cơ sở dữ liệu này chỉ chứa một số ít hồ sơ, hãy tưởng tượng nếu chúng tôi có 1000 bản hoặc 100 000 hồ sơ và trang web của chúng tôi nhận được 1000 lần truy cập mỗi ngày, truy vấn đó sẽ chạy thêm giờ. Nhưng bây giờ nó được tối ưu hóa, bạn sẽ tiết kiệm được một lượng lớn tài nguyên hệ thống có giá trị.

Thủ tục lưu trữ

Sự khác biệt giữa các quy trình được lưu trữ và các bộ báo cáo SQL khác là các quy trình được lưu trữ nằm trên máy chủ và được biên dịch sẵn.

Ok, đây có thể là một chút quá mức cần thiết cho truy vấn sau nhưng đó là một ví dụ về cách bạn có thể sử dụng quy trình được lưu trữ để tối ưu hóa hơn nữa cơ sở dữ liệu của bạn:

  • Các thủ tục được lưu trữ nhanh hơn vì chúng là mã SQL được biên dịch sẵn. Điều này làm giảm bước biên dịch và thực thi để chỉ thực thi trong hầu hết các trường hợp.
  • Tuy nhiên, tải trên máy chủ là một điểm khác cần xem xét vì hầu hết việc xử lý bây giờ sẽ được thực hiện trên máy chủ.

Hãy chạy với cùng một truy vấn, chúng tôi đã tối ưu hóa ở trên và dán nó vào một quy trình được lưu trữ:

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);
2

Nó đã được thêm vào. Bây giờ để xem tất cả các quy trình được lưu trữ có sẵn của bạn, vui lòng chạy truy vấn sau:

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);
3

Gọi thủ tục được lưu trữ của bạn sẽ thực hiện các câu lệnh SQL và bạn vượt qua tham số_breed_id, trong trường hợp này là chó săn giống (ID 1):

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);
4

Khử quy tắc bằng cách sử dụng các kích hoạt

Giữ cơ sở dữ liệu của bạn được chuẩn hóa giúp chúng tôi có ý nghĩa hơn về dữ liệu nhưng điều này xâm nhập vào hiệu suất vì bây giờ chúng tôi phải lấy dữ liệu từ các bảng khác nhau (cơ sở dữ liệu quan hệ)-chìa khóa để truy cập cơ sở dữ liệu hiệu suất cao đang gắn bó với các truy vấn chọn bảng đơn với các truy vấn ngắn chỉ mục.tables (relational database) – the key to a high performance database access is sticking to single-table SELECT queries with short indexes. tables (relational database) – the key to a high performance database access is sticking to single-table SELECT queries with short indexes.

Một cơ sở dữ liệu không chuẩn hóa được thực hiện bằng cách giữ dữ liệu được truy cập thường xuyên, được nhân đôi trên một số bảng, vào một bảng duy nhất để có thể điền đầy đủ yêu cầu của người dùng mà không phải xem nhiều hơn một bảng.

Ví dụ: để có được tổng số giống chó cho một nhà lai tạo cụ thể nói rằng Joe Bloggs hiện tại chúng tôi phải thực hiện một bảng tham gia trên bảng giống như Breed__breeder (nhiều-đến nhiều) và sử dụng ID chính trên Breeders Breater Breeder.id = 1 Để tìm Joe Bloggs:

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);
5

Nếu loại truy vấn này thực hiện bảng tham gia trên ba bảng khác nhau thường xuyên được chạy thì một tùy chọn hiệu suất sẽ là đặt nó vào một bảng duy nhất

Vì vậy, chúng tôi có thể thay đổi bảng người gây giống bằng cách thêm trường giống_total trong đó sẽ giữ tổng số lượng giống cho mỗi nhà lai tạo, theo cách này chúng tôi chỉ phải lập chỉ mục một bảng:

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);
6

Bây giờ trước hết hãy cập nhật thủ công giá trị Breed_total hiện tại cho mỗi nhà lai tạo vào trường Breed_total mới được tạo cho các mục hiện có:

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);
7

Tôi biết suy nghĩ của bạn là gì, sau đó làm thế nào để chúng tôi giữ các giá trị giống như hiện tại cho mỗi nhà lai tạo? Triggers là câu trả lời của bạn! Tôi sẽ giải thích…

Một kích hoạt được xác định để kích hoạt khi một loại sự kiện cụ thể xảy ra cho một bảng nhất định. Các sự kiện có thể xác định các sự kiện có thể được xác định là chèn, xóa và cập nhật. Một kích hoạt đã cho chỉ được xác định cho một trong những sự kiện này, nhưng bạn có thể xác định nhiều trình kích hoạt cho một bảng, một kích hoạt cho mỗi loại sự kiện.DELETE, and UPDATE. A given trigger is defined for only one of these events, but you can define multiple triggers for a table, one trigger per type of event. DELETE, and UPDATE. A given trigger is defined for only one of these events, but you can define multiple triggers for a table, one trigger per type of event.

Cho rằng có một mối quan hệ trực tiếp giữa giống chó và nhà lai tạo bằng cách sử dụng Breated Breed__breeder, chúng ta có thể tạo ra một số yếu tố kích hoạt để điền vào trường giống như vậy như vậypopulate the breed_total field like so… populate the breed_total field like so…

Chúng ta cần tạo một kích hoạt cho mỗi khi một bản ghi được chèn, xóa hoặc cập nhật trên bảng Breed__breeder và cập nhật trường Breed_total trên bảng Breeder:

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);
8

Để xem các trình kích hoạt mới được tạo của bạn chạy:

CREATE TABLE dog
(
    name
    descr
    .etc..
);

CREATE TABLE breed
(
    name
    descr
    .etc..
);

CREATE TABLE rfid_dog
(
    barcode
    date
    .etc..
);


CREATE TABLE breeder
(
    name
    address,
    phone
    .etc..
);
9

Bây giờ hãy xem xét mức tăng hiệu suất với việc chọn Breed_total cho một nhà lai tạo cụ thể chỉ bằng cách chỉ cần lập chỉ mục một bảng so với truy vấn chọn cũ, trong đó lập chỉ mục nhiều bảng:

CREATE TABLE dog
(
  id int(11) NOT NULL auto_increment,
  name varchar(255),
  descr text,
  size enum('small','medium','large'),
  date timestamp(14),
  PRIMARY KEY (id)
);

INSERT INTO dog (name,descr,size,date) VALUES('Max','Its distinctive appearance and deep foghorn voice make it stand out in a crowd.','medium',NOW());
INSERT INTO dog (name,descr,size,date) VALUES('Jake','It loves human companionship and being part of the group.','medium',NOW());
INSERT INTO dog (name,descr,size,date) VALUES('Buster','Short-legged but surprisingly strong and agile.','small',NOW());


CREATE TABLE rfid_dog
(
  dog_id int(11) NOT NULL,
  bar_code varchar(128) NOT NULL,
  notes text,
  iso_compliant enum('y','n') DEFAULT 'n',
  date timestamp(14),
  PRIMARY KEY (dog_id)
);

INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('1','234k34340ll2342323022','This is a RFID tag for the Max','y',NOW());
INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('2','09383638920290397d829','This is a RFID tag for the Jake','y',NOW());
INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('3','30id8383837210jndal20','This is a RFID tag for the Buster','y',NOW());
0

Sự khác biệt về hiệu suất có thể được nhìn thấy bởi lượng hàng được trả về chỉ với 1 hàng trong truy vấn đầu tiên so với 4 hàng trong truy vấn thứ hai. Bây giờ con số này sẽ phát triển đáng kể khi nhiều dữ liệu được điền vào cơ sở dữ liệu của chúng tôi, hiệu suất một lần nữa rất lớn!

Hiển thị danh sách quy trình

Điều này sẽ cho bạn thấy các quy trình chạy (truy vấn) hiện tại để có được ảnh chụp nhanh các truy vấn mà máy chủ đang bận làm ngay bây giờ! Điều quan trọng là đảm bảo bạn chỉ định để hiển thị danh sách xử lý đầy đủ để xem toàn bộ truy vấn. Nếu người dùng MySQL mà bạn đã đăng nhập như có các đặc quyền quy trình thì bạn sẽ thấy tất cả các luồng hoặc chỉ khác các luồng của riêng bạn, nghĩa là các luồng được liên kết với tài khoản MySQL bạn đang sử dụng.

Nếu bạn đã từng gặp quá nhiều kết nối với MySQL khi xem ‘Danh sách xử lý là một cách tốt để tìm hiểu những gì đang diễn ra. Sau đó, bạn có thể chạy giải thích trước bất kỳ truy vấn nào để đào sâu hơn một chút.

CREATE TABLE dog
(
  id int(11) NOT NULL auto_increment,
  name varchar(255),
  descr text,
  size enum('small','medium','large'),
  date timestamp(14),
  PRIMARY KEY (id)
);

INSERT INTO dog (name,descr,size,date) VALUES('Max','Its distinctive appearance and deep foghorn voice make it stand out in a crowd.','medium',NOW());
INSERT INTO dog (name,descr,size,date) VALUES('Jake','It loves human companionship and being part of the group.','medium',NOW());
INSERT INTO dog (name,descr,size,date) VALUES('Buster','Short-legged but surprisingly strong and agile.','small',NOW());


CREATE TABLE rfid_dog
(
  dog_id int(11) NOT NULL,
  bar_code varchar(128) NOT NULL,
  notes text,
  iso_compliant enum('y','n') DEFAULT 'n',
  date timestamp(14),
  PRIMARY KEY (dog_id)
);

INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('1','234k34340ll2342323022','This is a RFID tag for the Max','y',NOW());
INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('2','09383638920290397d829','This is a RFID tag for the Jake','y',NOW());
INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('3','30id8383837210jndal20','This is a RFID tag for the Buster','y',NOW());
1

Nhật ký truy vấn chậm

Nhật ký truy vấn chậm bao gồm tất cả các câu lệnh SQL mất nhiều hơn long_query_time giây để thực thi.

Cài đặt này bị tắt theo mặc định, để xem nó có bật chạy không:

CREATE TABLE dog
(
  id int(11) NOT NULL auto_increment,
  name varchar(255),
  descr text,
  size enum('small','medium','large'),
  date timestamp(14),
  PRIMARY KEY (id)
);

INSERT INTO dog (name,descr,size,date) VALUES('Max','Its distinctive appearance and deep foghorn voice make it stand out in a crowd.','medium',NOW());
INSERT INTO dog (name,descr,size,date) VALUES('Jake','It loves human companionship and being part of the group.','medium',NOW());
INSERT INTO dog (name,descr,size,date) VALUES('Buster','Short-legged but surprisingly strong and agile.','small',NOW());


CREATE TABLE rfid_dog
(
  dog_id int(11) NOT NULL,
  bar_code varchar(128) NOT NULL,
  notes text,
  iso_compliant enum('y','n') DEFAULT 'n',
  date timestamp(14),
  PRIMARY KEY (dog_id)
);

INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('1','234k34340ll2342323022','This is a RFID tag for the Max','y',NOW());
INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('2','09383638920290397d829','This is a RFID tag for the Jake','y',NOW());
INSERT INTO rfid_dog (dog_id,bar_code,notes,iso_compliant,date) VALUES('3','30id8383837210jndal20','This is a RFID tag for the Buster','y',NOW());
2

Nếu log_slow_queries thì chúng ta sẽ tốt.

Để bật nhật ký truy vấn chung, hãy bắt đầu mySQLD bằng tùy chọn của GoogleLog [= file_name] hoặc -l [file_name].

Chìa khóa thay thế

Don Tiết sử dụng các phím thay thế khi khóa chính xảy ra tự nhiên đã tồn tại - về cơ bản don don sử dụng trường ID tăng tự động nếu ID tự nhiên đã tồn tại

Truy vấn bộ nhớ cache

Nếu bạn đang sử dụng đọc các ứng dụng chuyên sâu, hãy bật bộ nhớ cache truy vấn .. tại sao, nếu nó có cùng một truy vấn chính xác và bộ dữ liệu của bạn đã thay đổi thì nó sẽ chỉ

Bộ đệm truy vấn chứa các hàng thực tế (tập kết quả) chứ không phải chính truy vấn SQL, vì vậy nếu nó bật lên thì nó sẽ chỉ cho các hàng trở lại

Nó không được bật theo mặc định để kích thước là 0 theo mặc định. Sử dụng ‘hiển thị trạng thái, để tìm hiểu, nếu nó nói loại truy vấn‘ trên trên nếu không có kích thước

Bộ nhớ vật lý

RAM (bộ nhớ máy tính vật lý) là cách rẻ nhất nhanh nhất để cải thiện hiệu suất với MySQL.

Sự kết luận

Bây giờ bạn có một sự hiểu biết công bằng về cách xây dựng cơ sở dữ liệu quan hệ MySQL bằng cách sử dụng ba mối quan hệ bảng nổi tiếng, một-một, một-nhiều và nhiều đến nhiều. Và bạn cũng có một danh sách các kỹ thuật tối ưu hóa để sử dụng để giúp tăng tốc mọi thứ.

Làm thế nào bạn có thể tạo một cơ sở dữ liệu quan hệ?

Quá trình thiết kế cơ sở dữ liệu quan hệ...

Bước 1: Xác định mục đích của cơ sở dữ liệu (phân tích yêu cầu) ....

Bước 2: Thu thập dữ liệu, tổ chức trong các bảng và chỉ định các khóa chính.....

Bước 3: Tạo mối quan hệ giữa các bảng.....

Bước 4: Tinh chỉnh & bình thường hóa thiết kế ..

MYSQL bảng quan hệ là gì?

Cơ sở dữ liệu quan hệ MySQL là tập hợp dữ liệu quan hệ được cấu trúc hoặc sắp xếp dưới dạng bảng, cột và hàng, trong đó các bảng đại diện cho các đối tượng, các cột đại diện cho các trường và hàng đại diện cho các bản ghi.an assemblage of relational data that is structured or organized in the form of tables, columns, and rows, where tables represent the objects, columns represent the fields and rows represent the records.an assemblage of relational data that is structured or organized in the form of tables, columns, and rows, where tables represent the objects, columns represent the fields and rows represent the records.

Tại sao MySQL là cơ sở dữ liệu quan hệ?

Cơ sở dữ liệu MySQL là quan hệ.Các cấu trúc cơ sở dữ liệu được tổ chức thành các tệp vật lý được tối ưu hóa cho tốc độ.Mô hình logic, với các đối tượng như cơ sở dữ liệu, bảng, chế độ xem, hàng và cột, cung cấp một môi trường lập trình linh hoạt.The database structures are organized into physical files optimized for speed. The logical model, with objects such as databases, tables, views, rows, and columns, offers a flexible programming environment.The database structures are organized into physical files optimized for speed. The logical model, with objects such as databases, tables, views, rows, and columns, offers a flexible programming environment.