Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tối ưu hóa lập chỉ mục đơn giản

Như đã giải thích trong nhận xét ở trên, INDEX(Dob) không được sử dụng - vì đây là chỉ mục trên năm-tháng-ngày . Bạn phải tạo chỉ mục vào tháng-ngày .

Có lẽ không phải là giải pháp thanh lịch nhất, nhưng:

CREATE TABLE `birthdayCard`(`Email` VARCHAR(255), `FirstName` CHAR(30), `LastName` CHAR(30),
                            `Mob` int, `Dob` int, 
                            PRIMARY KEY (Email), INDEX(`Mob`, `Dob`));

Xem http://sqlfiddle.com/#!2/db82ff/1

Để có câu trả lời tốt hơn (?):Vì MySQL không hỗ trợ các cột được tính toán, bạn có thể cần trình kích hoạt để điền các cột "tháng-ngày" và có một chỉ mục trên đó:

CREATE TABLE `birthdayCard`(`Email` VARCHAR(255), `FirstName` CHAR(30), `LastName` CHAR(30),
                            `Dob` DATE,
                            `Birthday` CHAR(5),
                            PRIMARY KEY (Email), INDEX(`Birthday`));

CREATE TRIGGER ins_bithdayCard BEFORE INSERT ON `birthdayCard`
FOR EACH ROW
    SET NEW.`birthday` = DATE_FORMAT(NEW.`Dob`, "%m%d");

CREATE TRIGGER upd_bithdayCard BEFORE UPDATE ON `birthdayCard`
FOR EACH ROW
    SET NEW.`birthday` = DATE_FORMAT(NEW.`Dob`, "%m%d");

Điều này cho phép chèn "đơn giản", bảo toàn Dob đầy đủ nếu cần như trong ví dụ ban đầu của bạn:

insert into birthdayCard (Email, FirstName, LastNAme, Dob) 
   values ("[email protected]", "Sylvain", "Leroux", '2013-08-05');

SELECT truy vấn phải được sửa đổi để sử dụng cột "tìm kiếm" mới:

SELECT * FROM `birthdayCard` WHERE Birthday = DATE_FORMAT(NOW(), "%m%d");

Sett http://sqlfiddle.com/#!2/66111/3



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách kiểm tra phiên bản MySQL

  2. Thư viện Php Mô hình Tập hợp lồng nhau

  3. PHP &mySQL - ë được viết là Ã ​​«

  4. Đặt hàng theo DESC không hoạt động cho biến tùy chỉnh $ how

  5. mysql:tìm các hàng có giá trị lặp lại cộng với điều kiện