Ho una tabella dove, facendo uno stress test, ho inserito 1000 record.
La tabella ha questi campi:
codice:
+---------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| db_now_time | datetime | NO | MUL | NULL | |
| db_sysdate_time | datetime | NO | | NULL | |
| php_gmdate_iso_8601 | varchar(30) | NO | | NULL | |
| php_gmdate_rfc_2822 | varchar(35) | NO | | NULL | |
| php_date_iso_8601 | varchar(30) | NO | | NULL | |
| php_date_rfc_2822 | varchar(35) | NO | | NULL | |
| php_time | bigint(20) | NO | | NULL | |
| php_microtime | varchar(20) | NO | | NULL | |
| extra_info | varchar(255) | YES | | NULL | |
+---------------------+---------------------+------+-----+---------+----------------+
come si può vedere, memorizzo anche i secondi e i microsecondi generati dallo script php.
In tutti i miei test, a partire dal record 300 circa, l'ID auto increment inizia a non essere più sequenziale, infatti se ordine i record per php_time e php_microtime, entrambi ASC, la lista degli id inizia ad essere:
codice:
+-----+
| id |
+-----+
| 302 |
| 301 |
| 304 |
| 305 |
| 303 |
| 306 |
| 309 |
| 307 |
| 308 |
| 310 |
+-----+
(se invece non indico alcu Order By, l'ordine è quello della chiave primaria, ID).
Ho trovato pochissime informazioni in rete, le più interessanti si limitavano a dire che l'auto increment di per sè non assicura una numerazione sequenziale, piuttosto un valore univoco.
Però non capisco come logicamente e fisicamente sia possibile che un record venga memorizzato con un ID superiore rispetto a quello che viene memorizzato successivamente ad esso.
PS: ho fatto prove anche forzando il lock della tabella
Grazie
Ciaoooooo!!!!