Laat ik beginnen met te zeggen dat ik veel vergelijkbare vragen heb bekeken, maar ze hebben allemaal betrekking op Timestamp
en DateTime
veldtype 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 InnoDB
is met 10+ million records
, welke query sneller zou worden uitgevoerd als de criteria zijn gebaseerd op:
- DateTime met index
- int met index
Met andere woorden, is het beter om datum en tijd op te slaan als DateTime
of 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_dt
met DateTime
en tbl_int
met 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 time
van tevoren wordt berekend, INT
wint.
Antwoord 2, autoriteit 82%
Mijn instinct zou zijn om te zeggen dat ints altijd sneller zijn. Dit lijkt echter niet het geval te zijn
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
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