Mysql không null mặc định

Một số cơ sở dữ liệu là một cấu trúc dữ liệu để cải thiện tốc độ của các hoạt động trong một bảng. Các số chỉ có thể được tạo ra bằng cách sử dụng một hoặc nhiều cột, cung cấp cơ sở cho việc nghiên cứu ngẫu nhiên cả hai nhanh chóng và hiệu quả

Trong khi tạo chỉ mục, cần lưu ý rằng các cột đó sẽ được sử dụng để thực hiện các truy vấn SQL và tạo ra một hoặc nhiều chỉ số trên các cột đó là gì

Thực tế, chỉ mục cũng là bảng loại, trong đó giữ nguyên từ khóa chính hoặc chỉ mục trường và một con trỏ đến từng bản ghi vào bảng thực tế

Người sử dụng không thể nhìn thấy các chỉ mục, chúng chỉ được sử dụng để tăng tốc độ truy vấn và sẽ được sử dụng bởi cơ sở dữ liệu tìm kiếm để xác định vị trí bản ghi rất nhanh

Lệnh INSERT và UPDATE tốn nhiều thời gian hơn trên các bảng có chỉ mục khi lệnh SELECT trở nên nhanh hơn trên các bảng này. Lý do là vì, trong khi chèn và cập nhật, cơ sở dữ liệu cũng cần phải chèn hoặc cập nhật các giá trị chỉ mục

Chỉ mục đơn giản và Chỉ mục duy nhất

Bạn có thể tạo một Chỉ mục duy nhất trên một bảng. Một chỉ mục duy nhất có nghĩa là hai hàng không thể có cùng một giá trị chỉ mục. Dưới đây là cú pháp để tạo một mục trên một bảng

CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...);

Bạn có thể sử dụng một hoặc nhiều cột để tạo một mục. Ví dụ, chúng ta có thể tạo chỉ mục trên

ALTER TABLE tbl_name ADD INDEX index_name (column_list)
8 sử dụng
ALTER TABLE tbl_name ADD INDEX index_name (column_list)
9

CREATE UNIQUE INDEX user_email
ON users (email);

Bạn có thể tạo một Simple Index trên một bảng. Đơn giản, bạn chỉ cần bỏ qua từ khóa UNIQUE từ truy vấn để tạo Chỉ mục đơn giản. Simple Index cho phép tồn tại bản sao các giá trị trong một bảng

Nếu bạn muốn lập chỉ mục các giá trị trong một cột theo thứ tự giảm dần, bạn có thể thêm từ DESC sau cột tên

CREATE UNIQUE INDEX user_email
ON users (email DESC)

Ra lệnh ALTER để thêm và xóa INDEX trong MySQL

Có 4 kiểu lệnh để thêm các mục cho một bảng

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list)

Lệnh này bổ sung MỘT KHÓA CHÍNH, nghĩa là các giá trị được thiết lập chỉ mục phải là duy nhất và không thể là NULL

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list)

Lệnh này tạo một mục chỉ cho các giá trị để giá trị đó phải là duy nhất (với giá trị NULL là ngoại lệ, chúng có thể xuất hiện nhiều lần)

ALTER TABLE tbl_name ADD INDEX index_name (column_list)

Lệnh này bổ sung một mục thông thường, trong đó bất kỳ giá trị nào cũng có thể xuất hiện nhiều hơn một lần

________số 8

Lệnh này tạo một mục FULLTEXT đặc biệt, được sử dụng cho mục đích tìm kiếm văn bản

Ví dụ sau để thêm mục cho một bảng đang tồn tại

ALTER TABLE tblUsers ADD INDEX (c);

Bạn có thể xóa bất kỳ INDEX nào theo sử dụng mệnh đề DROP cùng với lệnh ALTER. Bạn xem xét ví dụ sau để xóa chỉ mục đã được tạo ở trên

ALTER TABLE tbl_name ADD INDEX index_name (column_list)
0

Ra lệnh ALTER để thêm và xóa PRIMARY KEY

Bạn cũng có thể thêm Khóa chính theo cách tương tự. Nhưng chắc chắn rằng Primary Key đang làm việc trên các cột mà là NOT NULL

Ví dụ sau để thêm Primary Key vào một bảng đang tồn tại. Đầu tiên, cột được tạo là NOT NULL và sau đó bổ sung cho nó một Khóa chính

ALTER TABLE tbl_name ADD INDEX index_name (column_list)
1
CREATE UNIQUE INDEX user_email
ON users (email);
0

You can use ALTER command to delete a Primary Key as after

CREATE UNIQUE INDEX user_email
ON users (email);
1

Để xóa một mục mà không phải là KHÓA CHÍNH, bạn phải xác định lại tên của mục

Hiển thị thông tin chỉ mục trong MySQL Bạn sử dụng lệnh SHOW INDEX để liệt kê tất cả các chỉ mục được liên kết với một bảng. Kết quả trong định dạng dọc (được xác định bởi \G) thường có ích hơn với lệnh này, để tránh một dòng liệt kê dài

You try to example after

CREATE UNIQUE INDEX user_email
ON users (email);
2

Hãy xem xét ví dụ sau để tìm hiểu và so sánh về tốc độ khi đánh chỉ số cho cách trường

Thông tin về bảng Người dùng

CREATE UNIQUE INDEX user_email
ON users (email);
3

Và để tìm thông tin điểm của Hoàng Văn Huy (mã số 123123), bạn sẽ truy vấn như sau

CREATE UNIQUE INDEX user_email
ON users (email);
4

MySQL biết rằng phải tìm ở bảng người dùng nhưng nó sẽ không biết bắt đầu từ đâu. Cũng chí nó cũng không biết trước rằng có bao nhiêu quả. Do đó nó sẽ duyệt qua tất cả các danh sách (ví dụ: 200. 000 người) để tìm thông tin về Hoàng Văn Huy

Chỉ mục là 1 tệp riêng biệt được lưu trữ tại máy chủ và chỉ chứa những Trường mà bạn muốn nó chứa. Nếu bạn tạo 1 Index cho Field user_id (mã số người dùng), MySQL sẽ dễ dàng tìm ra mã số 1 cách nhanh chóng. Ví dụ như cuốn sách, khi cần tìm 1 thông tin, ta thường ngay lập tức tới phần “Mục lục” và tìm từ đó để tăng tốc độ tìm kiếm. Và việc tạo ra Chỉ mục này sẽ làm cho bạn thấy Cơ sở dữ liệu của bạn chạy nhanh hơn 1 cách khác thường

Nhưng trước khi sửa lại cấu trúc của table ở trên, mình sẽ hướng dẫn bạn 1 chút về cách theo dõi kết quả “Tăng tốc MySQL” mà bạn đang làm. Vui lòng sử dụng lệnh GIẢI THÍCH

cú pháp

CREATE UNIQUE INDEX user_email
ON users (email);
5

Bằng lệnh này, bạn sẽ nhận ra được câu hỏi của bạn, điều gì đang xảy ra và kiểu kết hợp (Tham gia) nào đang diễn ra bên trong

CREATE UNIQUE INDEX user_email
ON users (email);
6
CREATE UNIQUE INDEX user_email
ON users (email);
7
  • cái bàn. Table nào đang liên quan đến dữ liệu đầu ra
  • loại. Đây là thông tin quan trọng, nó cho chúng ta biết kiểu truy vấn nào nó đang sử dụng. Mức độ từ tốt nhất đến chậm nhất như sau. hệ thống, const, eq_ref, ref, phạm vi, chỉ mục, tất cả
CREATE UNIQUE INDEX user_email
ON users (email);
8
CREATE UNIQUE INDEX user_email
ON users (email);
6
CREATE UNIQUE INDEX user_email
ON users (email DESC)
0
  • có thể_keys. đưa ra những Index có thể sử dụng để truy vấn

  • Chìa khóa. and Index any being used

  • key_len. Chiều dài của từng mục trong Chỉ mục

  • giới thiệu. Các cột đang sử dụng

  • hàng. Số hàng (rows) mà MySQL dự kiến ​​phải tìm

  • thêm. Thông tin phụ, thật tệ nếu tại cột này là "sử dụng tạm thời" hoặc "sử dụng sắp xếp tệp"

@@, nhìn lại câu hỏi của chúng ta ta mới thật khủng khiếp. Không có Possible_keys nào được sử dụng, MySQL phải duyệt qua 17123 bản ghi mới tìm ra cái ta cần (Hãy tưởng tượng 1 Diễn đàn sẽ có hơn 500. 000 bản ghi)

Bây giờ chúng ta sẽ thêm Index vào và truy vấn lại

CREATE UNIQUE INDEX user_email
ON users (email);
8
CREATE UNIQUE INDEX user_email
ON users (email);
6
CREATE UNIQUE INDEX user_email
ON users (email DESC)
3

Tốt hơn nhiều rồi, kiểu TYPE = Const có nghĩa là MYSQL hiểu ra chỉ có 1 hàng đúng với ý ta, và có thể hiện qua cột Rows = 1, kiểu key= PRIMARY được sử dụng và chiều dài key_len là 10. Chỉ tìm 1 hàng tất nhiên là tốt hơn nhiều so với tìm 17123 hàng

Vì vậy, câu hỏi đặt ra là, nếu tôi muốn thêm Index cho những cột mà có thể có nhiều hơn 1 kết quả khi truy vấn thì sao?

Bạn có thể thêm chỉ mục theo cặp như bạn thêm chỉ mục cho cặp

ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list)
0 và
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list)
1

CREATE UNIQUE INDEX user_email
ON users (email DESC)
4
CREATE UNIQUE INDEX user_email
ON users (email DESC)
0

Tuy nhiên, nếu chỉ cần tên

CREATE UNIQUE INDEX user_email
ON users (email DESC)
6
CREATE UNIQUE INDEX user_email
ON users (email DESC)
7

thì MySQL sẽ tìm hết vì không hề có Index cho firstname mà chỉ có Index cho (firstname, lastname)

Khi nào thì cần Add Index ? . Vì vậy hãy cân nhắc, nếu Cơ sở dữ liệu của bạn sử dụng INSERT hay UPDATE nhiều hơn là CHỌN thì Index chỉ làm chậm thêm mà thôi

Có thể nhanh hơn nữa không? . Bạn không cần phải làm Index cho cả

ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list)
3 mà chỉ cần 1 phần. Giống như chi tiết mục lục của sách mà quá dài cũng làm bạn khá là quái, có phải họ chỉ trích dẫn 1 tựa đề. Quay lại với bảng của chúng ta, họ và tên chỉ tối đa là 50 ký tự, nếu chúng ta lập chỉ mục cho nó, chúng ta tạo ra mỗi bản ghi lên đến 100 ký tự. There can't Tiết kiệm điện theo cách sau

CREATE UNIQUE INDEX user_email
ON users (email DESC)
8

Bây giờ thì bạn tiết kiệm điện năng được đến 50% mà vẫn đảm bảo tốc độ rồi đó (trừ trường hợp bạn làm Index quá ngắn). Có thể bạn nói máy chủ đĩa cứng của tôi “vô tư” nhưng hãy nhớ rằng “Nhỏ hơn là nhanh hơn”