Mysql
 sql >> база данни >  >> RDS >> Mysql

Лесно оптимизиране на индексирането

Както е обяснено в коментара по-горе, INDEX(Dob) не се използва -- тъй като това е индекс на година-месец-ден . Трябва да създадете индекс на месец-ден .

Вероятно не е най-елегантното решение, но:

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

Вижте http://sqlfiddle.com/#!2/db82ff/1

За по-добър (?) отговор:тъй като MySQL не поддържа изчислени колони, може да имате нужда от тригери за попълване на колони „месец-ден“ и да имате индекс върху тях:

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");

Това позволява "прости" вмъквания, запазвайки, ако е необходимо, пълния Dob както във вашия оригинален пример:

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

SELECT заявката трябва да бъде променена, за да използва новата колона "търсене":

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

Задайте 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. Mysql errno 150 се опитва да създаде таблица с препратки към външни ключове

  2. Как мога да задам максимален брой редове в MySQL таблицата?

  3. MySQL конвенции за именуване, трябва ли името на полето да включва името на таблицата?

  4. Пребройте броя на максималните стойности за няколко дати

  5. Преобразуване на резултатите от MySQL в стойности, разделени със запетая