Saltar al contenido

¿Inserciones masivas más rápidas en sqlite3?

Esta noticia fue analizado por expertos así se garantiza la exactitud de nuestro contenido.

Solución:

  • envuelva todos los INSERT en una transacción, incluso si hay un solo usuario, es mucho más rápido.
  • utilizar declaraciones preparadas.

Quieres usar el .import mando. Por ejemplo:

$ cat demotab.txt
44      92
35      94
43      94
195     49
66      28
135     93
135     91
67      84
135     94

$ echo "create table mytable (col1 int, col2 int);" | sqlite3 foo.sqlite
$ echo ".import demotab.txt mytable"  | sqlite3 foo.sqlite

$ sqlite3 foo.sqlite
-- Loading resources from /Users/ramanujan/.sqliterc
SQLite version 3.6.6.2
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from mytable;
col1    col2
44      92
35      94
43      94
195     49
66      28
135     93
135     91
67      84
135     94

Tenga en cuenta que este comando de carga masiva no es SQL sino una característica personalizada de SQLite. Como tal, tiene una sintaxis extraña porque lo estamos pasando a través de echo al intérprete de línea de comando interactivo, sqlite3.

En PostgreSQL el equivalente es COPY FROM: http://www.postgresql.org/docs/8.1/static/sql-copy.html

En MySQL es LOAD DATA LOCAL INFILE: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

Una última cosa: recuerda tener cuidado con el valor de .separator. Ese es un problema muy común cuando se realizan inserciones masivas.

sqlite> .show .separator
     echo: off
  explain: off
  headers: on
     mode: list
nullvalue: ""
   output: stdout
separator: "t"
    width:

Debe configurar explícitamente el separador para que sea un espacio, una tabulación o una coma antes de hacer .import.

También puede intentar ajustar algunos parámetros para obtener una velocidad adicional. Específicamente, probablemente quieras PRAGMA synchronous = OFF;.

Si tienes alguna cuestión o capacidad de enriquecer nuestro división te sugerimos ejecutar una acotación y con placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *