MySQL Integer vs DateTime-index

Laat ik beginnen met te zeggen dat ik veel vergelijkbare vragen heb bekeken, maar ze hebben allemaal betrekking op Timestampen DateTimeveldtype zonder indexering. Tenminste dat is mijn begrip.

Zoals we allemaal weten, zijn er bepaalde voordelen als het gaat om DateTime. Als je ze even opzij zet, en ervan uitgaat dat de engine van de tabel InnoDBis met 10+ million records, welke query sneller zou worden uitgevoerd als de criteria zijn gebaseerd op:

  1. DateTime met index
  2. int met index

Met andere woorden, is het beter om datum en tijd op te slaan als DateTimeof UNIX-tijdstempel in INT? Houd er rekening mee dat er geen ingebouwde MySQL-functies nodig zijn.

Bijwerken

Getest met MySQL 5.1.41 (64-bits) en 10 miljoen records, toonden de eerste tests een significant snelheidsverschil in het voordeel van INT. Er werden twee tabellen gebruikt, tbl_dtmet DateTimeen tbl_intmet de kolom INT. Weinig resultaten:

SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt`;
+----------+
| COUNT(*) |
+----------+
| 10000000 |
+----------+
1 row in set (2 min 10.27 sec)
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int`;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (25.02 sec)
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt` WHERE `created` BETWEEN '2009-01-30' AND '2009-12-30';
+----------+
| COUNT(*) |
+----------+
|   835663 |
+----------+
1 row in set (8.41 sec)
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int` WHERE `created` BETWEEN 1233270000 AND 1262127600;
+----------+
| COUNT(*) |
+----------+
|   835663 |
+----------+
1 row in set (1.56 sec)

Ik zal nog een update plaatsen met beide velden in één tabel, zoals voorgesteld door shantanuo.

Update #2

Eindresultaten na talloze servercrashes 🙂 Int-type is aanzienlijk sneller, ongeacht welke query werd uitgevoerd, het snelheidsverschil was min of meer hetzelfde als de resultaten hierboven.

Het “vreemde” ding dat werd waargenomen, was dat de uitvoeringstijd min of meer hetzelfde was wanneer twee beide veldtypen in dezelfde tabel worden opgeslagen. Het lijkt erop dat MySQL slim genoeg is om erachter te komen wanneer de waarden hetzelfde zijn wanneer ze worden opgeslagen in zowel DateTime als int. Ik heb geen documentatie over het onderwerp gevonden, daarom is het slechts een observatie.


Antwoord 1, autoriteit 100%

Ik zie dat in de test genoemd in het bovenstaande antwoord, de auteur bewijst in feite dat wanneer de UNIX timevan tevoren wordt berekend, INTwint.


Antwoord 2, autoriteit 82%

Mijn instinct zou zijn om te zeggen dat ints altijd sneller zijn. Dit lijkt echter niet het geval te zijn

http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-myisam/

Bewerkt om toe te voegen: ik realiseer me dat je InnoDB gebruikt in plaats van MyISAM, maar ik heb niets gevonden dat dit tegenspreekt in de InnoDB-zaak. Dezelfde auteur deed ook een InnoDB-test

http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-innodb/


Antwoord 3, autoriteit 9%

het hangt af van uw toepassing, zoals u kunt zien in een geweldige vergelijking en benchmark van DATETIME , TIMESTAMP en INT-type in Mysql-server in MySQL-datumnotatie: welk gegevenstype moet u gebruiken? We vergelijken Datetime, Timestamp en INT.je kunt zien dat INT in sommige situaties beter presteert dan in andere en in sommige gevallen DATETIME beter presteert. en Het hangt volledig af van uw toepassing

Other episodes