Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Prosta optymalizacja indeksowania

Jak wyjaśniono w powyższym komentarzu, INDEX(Dob) nie jest używany — ponieważ jest to indeks rok-miesiąc-dzień . Musisz utworzyć indeks dzień-miesiąca .

Prawdopodobnie nie najbardziej eleganckie rozwiązanie, ale:

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

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

Aby uzyskać lepszą (?) odpowiedź:ponieważ MySQL nie obsługuje kolumn obliczanych, możesz potrzebować wyzwalaczy do wypełnienia kolumn „miesiąc-dzień” i posiadania ich indeksu:

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

Pozwala to na "proste" wstawianie, zachowując w razie potrzeby pełny Dob jak w oryginalnym przykładzie:

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

SELECT zapytanie należy zmodyfikować, aby używało nowej kolumny „szukaj”:

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. czy istnieje funkcja mysql do dekodowania jednostek html?

  2. Wybierz wszystkich klientów, chyba że mają inny produkt - SQL

  3. Jak przechowywać adresy URL w MySQL

  4. Monitorowanie używanych połączeń w mysql w celu debugowania „zbyt wielu połączeń”

  5. Funkcja MySQL DEGREES() — konwersja z radianów na stopnie