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

60 милиона записи, изберете записи от определен месец. Как да оптимизираме базата данни?

За да получите записи през конкретен месец, за определена година, по-бързо - ще трябва да индексирате time колона :

CREATE INDEX idx_time ON ENTRIES(time) USING BTREE;

Освен това използвайте:

SELECT e.* 
  FROM ENTRIES e
 WHERE e.time BETWEEN '2010-04-01' AND DATE_SUB('2010-05-01' INTERVAL 1 SECOND)

...защото BETWEEN е включващо, така че ще получите всичко с дата "2010-05-01 00:00:00" със заявката, която сте публикували.

Също така бих искал да избера данни от определен месец от даден DataSourceID

Можете да добавите отделен индекс за колоната datasourceid:

CREATE INDEX idx_time ON ENTRIES(datasourceid) USING BTREE;

...или настройте покриващ индекс, който да включва и двете колони:

CREATE INDEX idx_time ON ENTRIES(time, datasourceid) USING BTREE;

Покриващ индекс изисква най-лявата колона да се използва в заявката, за да се използва индексът. В този пример има time first ще работи и за двете ситуации, които споменахте - datasourceid не трябва да се използва, за да може индексът да бъде полезен. Но трябва да тествате заявките си, като прегледате изхода EXPLAIN, за да разберете наистина какво работи най-добре за вашите данни и заявките, които се изпълняват върху тези данни.

Въпреки това индексите ще забавят операторите INSERT, UPDATE и DELETE. И индексът не предоставя много стойност, ако данните в колоната имат малко различни стойности - IE:булева колона е лош избор за индексиране, тъй като мощността е ниска.



  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 от командния ред

  2. Използване на OpenVPN за защитен достъп до вашия клъстер от база данни в облака

  3. MySQL AUTO_INCREMENT не се връща назад

  4. Грешка в MySQL 1170 (42000):колона BLOB/TEXT, използвана в спецификацията на ключа без дължина на ключа

  5. Как да използвам GROUP BY за конкатенация на низове в MySQL?