Zoals uitgelegd in de opmerking hierboven, is de INDEX(Dob)
wordt niet gebruikt -- aangezien dit een index is op jaar-maand-dag . U moet een index maken op maand-dag .
Waarschijnlijk niet de meest elegante oplossing, maar:
CREATE TABLE `birthdayCard`(`Email` VARCHAR(255), `FirstName` CHAR(30), `LastName` CHAR(30),
`Mob` int, `Dob` int,
PRIMARY KEY (Email), INDEX(`Mob`, `Dob`));
Zie http://sqlfiddle.com/#!2/db82ff/1
Voor een beter (?) antwoord:aangezien MySQL geen berekende kolommen ondersteunt, hebt u mogelijk triggers nodig om een "maand-dag"-kolom te vullen en er een index op te hebben:
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");
Dit maakt "eenvoudige" invoegingen mogelijk, waarbij indien nodig de volledige Dob
. behouden blijft zoals in je originele voorbeeld:
insert into birthdayCard (Email, FirstName, LastNAme, Dob)
values ("[email protected]", "Sylvain", "Leroux", '2013-08-05');
De SELECT
zoekopdracht moet worden aangepast om de nieuwe kolom "zoeken" te gebruiken:
SELECT * FROM `birthdayCard` WHERE Birthday = DATE_FORMAT(NOW(), "%m%d");
Sett http://sqlfiddle.com/#!2/66111/3