/ Hex Artifact Content
Login

Artifact 19cf0c1bf73c4b534dfafc95b3eacff4825740b4:


0000: 23 0a 23 20 52 75 6e 20 74 68 69 73 20 54 63 6c  #.# Run this Tcl
0010: 20 73 63 72 69 70 74 20 74 6f 20 67 65 6e 65 72   script to gener
0020: 61 74 65 20 74 68 65 20 73 70 65 65 64 2e 68 74  ate the speed.ht
0030: 6d 6c 20 66 69 6c 65 2e 0a 23 0a 73 65 74 20 72  ml file..#.set r
0040: 63 73 69 64 20 7b 24 49 64 3a 20 73 70 65 65 64  csid {$Id: speed
0050: 2e 74 63 6c 2c 76 20 31 2e 31 34 20 32 30 30 34  .tcl,v 1.14 2004
0060: 2f 30 35 2f 33 31 20 31 35 3a 30 36 3a 33 30 20  /05/31 15:06:30 
0070: 64 72 68 20 45 78 70 20 24 20 7d 0a 73 6f 75 72  drh Exp $ }.sour
0080: 63 65 20 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 68 65  ce common.tcl.he
0090: 61 64 65 72 20 7b 53 51 4c 69 74 65 20 44 61 74  ader {SQLite Dat
00a0: 61 62 61 73 65 20 53 70 65 65 64 20 43 6f 6d 70  abase Speed Comp
00b0: 61 72 69 73 6f 6e 7d 0a 0a 70 75 74 73 20 7b 0a  arison}..puts {.
00c0: 3c 68 32 3e 44 61 74 61 62 61 73 65 20 53 70 65  <h2>Database Spe
00d0: 65 64 20 43 6f 6d 70 61 72 69 73 6f 6e 3c 2f 68  ed Comparison</h
00e0: 32 3e 0a 0a 3c 68 33 3e 45 78 65 63 75 74 69 76  2>..<h3>Executiv
00f0: 65 20 53 75 6d 6d 61 72 79 3c 2f 68 33 3e 0a 0a  e Summary</h3>..
0100: 3c 70 3e 41 20 73 65 72 69 65 73 20 6f 66 20 74  <p>A series of t
0110: 65 73 74 73 20 77 65 72 65 20 72 75 6e 20 74 6f  ests were run to
0120: 20 6d 65 61 73 75 72 65 20 74 68 65 20 72 65 6c   measure the rel
0130: 61 74 69 76 65 20 70 65 72 66 6f 72 6d 61 6e 63  ative performanc
0140: 65 20 6f 66 0a 53 51 4c 69 74 65 20 32 2e 37 2e  e of.SQLite 2.7.
0150: 36 2c 20 50 6f 73 74 67 72 65 53 51 4c 20 37 2e  6, PostgreSQL 7.
0160: 31 2e 33 2c 20 61 6e 64 20 4d 79 53 51 4c 20 33  1.3, and MySQL 3
0170: 2e 32 33 2e 34 31 2e 0a 54 68 65 20 66 6f 6c 6c  .23.41..The foll
0180: 6f 77 69 6e 67 20 61 72 65 20 67 65 6e 65 72 61  owing are genera
0190: 6c 0a 63 6f 6e 63 6c 75 73 69 6f 6e 73 20 64 72  l.conclusions dr
01a0: 61 77 6e 20 66 72 6f 6d 20 74 68 65 73 65 20 65  awn from these e
01b0: 78 70 65 72 69 6d 65 6e 74 73 3a 0a 3c 2f 70 3e  xperiments:.</p>
01c0: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ..<ul>.<li><p>. 
01d0: 20 53 51 4c 69 74 65 20 32 2e 37 2e 36 20 69 73   SQLite 2.7.6 is
01e0: 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20 66   significantly f
01f0: 61 73 74 65 72 20 28 73 6f 6d 65 74 69 6d 65 73  aster (sometimes
0200: 20 61 73 20 6d 75 63 68 20 61 73 20 31 30 20 6f   as much as 10 o
0210: 72 0a 20 20 32 30 20 74 69 6d 65 73 20 66 61 73  r.  20 times fas
0220: 74 65 72 29 20 74 68 61 6e 20 74 68 65 20 64 65  ter) than the de
0230: 66 61 75 6c 74 20 50 6f 73 74 67 72 65 53 51 4c  fault PostgreSQL
0240: 20 37 2e 31 2e 33 20 69 6e 73 74 61 6c 6c 61 74   7.1.3 installat
0250: 69 6f 6e 0a 20 20 6f 6e 20 52 65 64 48 61 74 20  ion.  on RedHat 
0260: 37 2e 32 20 66 6f 72 20 6d 6f 73 74 20 63 6f 6d  7.2 for most com
0270: 6d 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20  mon operations. 
0280: 20 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e   .</p></li>.<li>
0290: 3c 70 3e 0a 20 20 53 51 4c 69 74 65 20 32 2e 37  <p>.  SQLite 2.7
02a0: 2e 36 20 69 73 20 6f 66 74 65 6e 20 66 61 73 74  .6 is often fast
02b0: 65 72 20 28 73 6f 6d 65 74 69 6d 65 73 0a 20 20  er (sometimes.  
02c0: 6d 6f 72 65 20 74 68 61 6e 20 74 77 69 63 65 20  more than twice 
02d0: 61 73 20 66 61 73 74 29 20 74 68 61 6e 20 4d 79  as fast) than My
02e0: 53 51 4c 20 33 2e 32 33 2e 34 31 0a 20 20 66 6f  SQL 3.23.41.  fo
02f0: 72 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 6f 70  r most common op
0300: 65 72 61 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 3c 2f  erations..</p></
0310: 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 53 51  li>.<li><p>.  SQ
0320: 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 65 78  Lite does not ex
0330: 65 63 75 74 65 20 43 52 45 41 54 45 20 49 4e 44  ecute CREATE IND
0340: 45 58 20 6f 72 20 44 52 4f 50 20 54 41 42 4c 45  EX or DROP TABLE
0350: 20 61 73 20 66 61 73 74 20 61 73 0a 20 20 74 68   as fast as.  th
0360: 65 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  e other database
0370: 73 2e 20 20 42 75 74 20 74 68 69 73 20 69 73 20  s.  But this is 
0380: 6e 6f 74 20 73 65 65 6e 20 61 73 20 61 20 70 72  not seen as a pr
0390: 6f 62 6c 65 6d 20 62 65 63 61 75 73 65 0a 20 20  oblem because.  
03a0: 74 68 6f 73 65 20 61 72 65 20 69 6e 66 72 65 71  those are infreq
03b0: 75 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 73 2e  uent operations.
03c0: 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c  .</p></li>.<li><
03d0: 70 3e 0a 20 20 53 51 4c 69 74 65 20 77 6f 72 6b  p>.  SQLite work
03e0: 73 20 62 65 73 74 20 69 66 20 79 6f 75 20 67 72  s best if you gr
03f0: 6f 75 70 20 6d 75 6c 74 69 70 6c 65 20 6f 70 65  oup multiple ope
0400: 72 61 74 69 6f 6e 73 20 74 6f 67 65 74 68 65 72  rations together
0410: 20 69 6e 74 6f 0a 20 20 61 20 73 69 6e 67 6c 65   into.  a single
0420: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 3c 2f   transaction..</
0430: 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
0440: 70 3e 0a 54 68 65 20 72 65 73 75 6c 74 73 20 70  p>.The results p
0450: 72 65 73 65 6e 74 65 64 20 68 65 72 65 20 63 6f  resented here co
0460: 6d 65 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  me with the foll
0470: 6f 77 69 6e 67 20 63 61 76 65 61 74 73 3a 0a 3c  owing caveats:.<
0480: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
0490: 3e 0a 20 20 54 68 65 73 65 20 74 65 73 74 73 20  >.  These tests 
04a0: 64 69 64 20 6e 6f 74 20 61 74 74 65 6d 70 74 20  did not attempt 
04b0: 74 6f 20 6d 65 61 73 75 72 65 20 6d 75 6c 74 69  to measure multi
04c0: 2d 75 73 65 72 20 70 65 72 66 6f 72 6d 61 6e 63  -user performanc
04d0: 65 20 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 61 74  e or.  optimizat
04e0: 69 6f 6e 20 6f 66 20 63 6f 6d 70 6c 65 78 20 71  ion of complex q
04f0: 75 65 72 69 65 73 20 69 6e 76 6f 6c 76 69 6e 67  ueries involving
0500: 20 6d 75 6c 74 69 70 6c 65 20 6a 6f 69 6e 73 20   multiple joins 
0510: 61 6e 64 20 73 75 62 71 75 65 72 69 65 73 2e 0a  and subqueries..
0520: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70  </p></li>.<li><p
0530: 3e 0a 20 20 54 68 65 73 65 20 74 65 73 74 73 20  >.  These tests 
0540: 61 72 65 20 6f 6e 20 61 20 72 65 6c 61 74 69 76  are on a relativ
0550: 65 6c 79 20 73 6d 61 6c 6c 20 28 61 70 70 72 6f  ely small (appro
0560: 78 69 6d 61 74 65 6c 79 20 31 34 20 6d 65 67 61  ximately 14 mega
0570: 62 79 74 65 29 20 64 61 74 61 62 61 73 65 2e 0a  byte) database..
0580: 20 20 54 68 65 79 20 64 6f 20 6e 6f 74 20 6d 65    They do not me
0590: 61 73 75 72 65 20 68 6f 77 20 77 65 6c 6c 20 74  asure how well t
05a0: 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  he database engi
05b0: 6e 65 73 20 73 63 61 6c 65 20 74 6f 20 6c 61 72  nes scale to lar
05c0: 67 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a 3c 2f  ger problems..</
05d0: 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
05e0: 68 33 3e 54 65 73 74 20 45 6e 76 69 72 6f 6e 6d  h3>Test Environm
05f0: 65 6e 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 0a 54 68  ent</h3>..<p>.Th
0600: 65 20 70 6c 61 74 66 6f 72 6d 20 75 73 65 64 20  e platform used 
0610: 66 6f 72 20 74 68 65 73 65 20 74 65 73 74 73 20  for these tests 
0620: 69 73 20 61 20 31 2e 36 47 48 7a 20 41 74 68 6c  is a 1.6GHz Athl
0630: 6f 6e 20 77 69 74 68 20 31 47 42 20 6f 72 20 6d  on with 1GB or m
0640: 65 6d 6f 72 79 0a 61 6e 64 20 61 6e 20 49 44 45  emory.and an IDE
0650: 20 64 69 73 6b 20 64 72 69 76 65 2e 20 20 54 68   disk drive.  Th
0660: 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  e operating syst
0670: 65 6d 20 69 73 20 52 65 64 48 61 74 20 4c 69 6e  em is RedHat Lin
0680: 75 78 20 37 2e 32 20 77 69 74 68 0a 61 20 73 74  ux 7.2 with.a st
0690: 6f 63 6b 20 6b 65 72 6e 65 6c 2e 0a 3c 2f 70 3e  ock kernel..</p>
06a0: 0a 0a 3c 70 3e 0a 54 68 65 20 50 6f 73 74 67 72  ..<p>.The Postgr
06b0: 65 53 51 4c 20 61 6e 64 20 4d 79 53 51 4c 20 73  eSQL and MySQL s
06c0: 65 72 76 65 72 73 20 75 73 65 64 20 77 65 72 65  ervers used were
06d0: 20 61 73 20 64 65 6c 69 76 65 72 65 64 20 62 79   as delivered by
06e0: 20 64 65 66 61 75 6c 74 20 6f 6e 0a 52 65 64 48   default on.RedH
06f0: 61 74 20 37 2e 32 2e 20 20 28 50 6f 73 74 67 72  at 7.2.  (Postgr
0700: 65 53 51 4c 20 76 65 72 73 69 6f 6e 20 37 2e 31  eSQL version 7.1
0710: 2e 33 20 61 6e 64 20 4d 79 53 51 4c 20 76 65 72  .3 and MySQL ver
0720: 73 69 6f 6e 20 33 2e 32 33 2e 34 31 2e 29 0a 4e  sion 3.23.41.).N
0730: 6f 20 65 66 66 6f 72 74 20 77 61 73 20 6d 61 64  o effort was mad
0740: 65 20 74 6f 20 74 75 6e 65 20 74 68 65 73 65 20  e to tune these 
0750: 65 6e 67 69 6e 65 73 2e 20 20 4e 6f 74 65 20 69  engines.  Note i
0760: 6e 20 70 61 72 74 69 63 75 6c 61 72 0a 74 68 65  n particular.the
0770: 20 74 68 65 20 64 65 66 61 75 6c 74 20 4d 79 53   the default MyS
0780: 51 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  QL configuration
0790: 20 6f 6e 20 52 65 64 48 61 74 20 37 2e 32 20 64   on RedHat 7.2 d
07a0: 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a  oes not support.
07b0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 4e  transactions.  N
07c0: 6f 74 20 68 61 76 69 6e 67 20 74 6f 20 73 75 70  ot having to sup
07d0: 70 6f 72 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  port transaction
07e0: 73 20 67 69 76 65 73 20 4d 79 53 51 4c 20 61 0a  s gives MySQL a.
07f0: 62 69 67 20 73 70 65 65 64 20 61 64 76 61 6e 74  big speed advant
0800: 61 67 65 2c 20 62 75 74 20 53 51 4c 69 74 65 20  age, but SQLite 
0810: 69 73 20 73 74 69 6c 6c 20 61 62 6c 65 20 74 6f  is still able to
0820: 20 68 6f 6c 64 20 69 74 73 20 6f 77 6e 20 6f 6e   hold its own on
0830: 20 6d 6f 73 74 0a 74 65 73 74 73 2e 0a 3c 2f 70   most.tests..</p
0840: 3e 0a 0a 3c 70 3e 0a 49 20 61 6d 20 74 6f 6c 64  >..<p>.I am told
0850: 20 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c   that the defaul
0860: 74 20 50 6f 73 74 67 72 65 53 51 4c 20 63 6f 6e  t PostgreSQL con
0870: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 20 52 65  figuration in Re
0880: 64 48 61 74 20 37 2e 33 0a 69 73 20 75 6e 6e 65  dHat 7.3.is unne
0890: 63 65 73 73 61 72 69 6c 79 20 63 6f 6e 73 65 72  cessarily conser
08a0: 76 61 74 69 76 65 20 28 69 74 20 69 73 20 64 65  vative (it is de
08b0: 73 69 67 6e 65 64 20 74 6f 0a 77 6f 72 6b 20 6f  signed to.work o
08c0: 6e 20 61 20 6d 61 63 68 69 6e 65 20 77 69 74 68  n a machine with
08d0: 20 38 4d 42 20 6f 66 20 52 41 4d 29 20 61 6e 64   8MB of RAM) and
08e0: 20 74 68 61 74 20 50 6f 73 74 67 72 65 53 51 4c   that PostgreSQL
08f0: 20 63 6f 75 6c 64 0a 62 65 20 6d 61 64 65 20 74   could.be made t
0900: 6f 20 72 75 6e 20 61 20 6c 6f 74 20 66 61 73 74  o run a lot fast
0910: 65 72 20 77 69 74 68 20 73 6f 6d 65 20 6b 6e 6f  er with some kno
0920: 77 6c 65 64 67 61 62 6c 65 20 63 6f 6e 66 69 67  wledgable config
0930: 75 72 61 74 69 6f 6e 0a 74 75 6e 69 6e 67 2e 0a  uration.tuning..
0940: 4d 61 74 74 20 53 65 72 67 65 61 6e 74 20 72 65  Matt Sergeant re
0950: 70 6f 72 74 73 20 74 68 61 74 20 68 65 20 68 61  ports that he ha
0960: 73 20 74 75 6e 65 64 20 68 69 73 20 50 6f 73 74  s tuned his Post
0970: 67 72 65 53 51 4c 20 69 6e 73 74 61 6c 6c 61 74  greSQL installat
0980: 69 6f 6e 0a 61 6e 64 20 72 65 72 75 6e 20 74 68  ion.and rerun th
0990: 65 20 74 65 73 74 73 20 73 68 6f 77 6e 20 62 65  e tests shown be
09a0: 6c 6f 77 2e 20 20 48 69 73 20 72 65 73 75 6c 74  low.  His result
09b0: 73 20 73 68 6f 77 20 74 68 61 74 0a 50 6f 73 74  s show that.Post
09c0: 67 72 65 53 51 4c 20 61 6e 64 20 4d 79 53 51 4c  greSQL and MySQL
09d0: 20 72 75 6e 20 61 74 20 61 62 6f 75 74 20 74 68   run at about th
09e0: 65 20 73 61 6d 65 20 73 70 65 65 64 2e 20 20 46  e same speed.  F
09f0: 6f 72 20 4d 61 74 74 27 73 0a 72 65 73 75 6c 74  or Matt's.result
0a00: 73 2c 20 76 69 73 69 74 0a 3c 2f 70 3e 0a 0a 3c  s, visit.</p>..<
0a10: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 61 20 68  blockquote>.<a h
0a20: 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e  ref="http://www.
0a30: 73 65 72 67 65 61 6e 74 2e 6f 72 67 2f 73 71 6c  sergeant.org/sql
0a40: 69 74 65 5f 76 73 5f 70 67 73 79 6e 63 2e 68 74  ite_vs_pgsync.ht
0a50: 6d 6c 22 3e 0a 68 74 74 70 3a 2f 2f 77 77 77 2e  ml">.http://www.
0a60: 73 65 72 67 65 61 6e 74 2e 6f 72 67 2f 73 71 6c  sergeant.org/sql
0a70: 69 74 65 5f 76 73 5f 70 67 73 79 6e 63 2e 68 74  ite_vs_pgsync.ht
0a80: 6d 6c 3c 2f 61 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  ml</a>.</blockqu
0a90: 6f 74 65 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  ote>..<p>.SQLite
0aa0: 20 77 61 73 20 74 65 73 74 65 64 20 69 6e 20 74   was tested in t
0ab0: 68 65 20 73 61 6d 65 20 63 6f 6e 66 69 67 75 72  he same configur
0ac0: 61 74 69 6f 6e 20 74 68 61 74 20 69 74 20 61 70  ation that it ap
0ad0: 70 65 61 72 73 0a 6f 6e 20 74 68 65 20 77 65 62  pears.on the web
0ae0: 73 69 74 65 2e 20 20 49 74 20 77 61 73 20 63 6f  site.  It was co
0af0: 6d 70 69 6c 65 64 20 77 69 74 68 20 2d 4f 36 20  mpiled with -O6 
0b00: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 61 6e 64  optimization and
0b10: 20 77 69 74 68 0a 74 68 65 20 2d 44 4e 44 45 42   with.the -DNDEB
0b20: 55 47 3d 31 20 73 77 69 74 63 68 20 77 68 69 63  UG=1 switch whic
0b30: 68 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 6d  h disables the m
0b40: 61 6e 79 20 22 61 73 73 65 72 74 28 29 22 20 73  any "assert()" s
0b50: 74 61 74 65 6d 65 6e 74 73 0a 69 6e 20 74 68 65  tatements.in the
0b60: 20 53 51 4c 69 74 65 20 63 6f 64 65 2e 20 20 54   SQLite code.  T
0b70: 68 65 20 2d 44 4e 44 45 42 55 47 3d 31 20 63 6f  he -DNDEBUG=1 co
0b80: 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 20 72 6f  mpiler option ro
0b90: 75 67 68 6c 79 20 64 6f 75 62 6c 65 73 0a 74 68  ughly doubles.th
0ba0: 65 20 73 70 65 65 64 20 6f 66 20 53 51 4c 69 74  e speed of SQLit
0bb0: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 6c 6c  e..</p>..<p>.All
0bc0: 20 74 65 73 74 73 20 61 72 65 20 63 6f 6e 64 75   tests are condu
0bd0: 63 74 65 64 20 6f 6e 20 61 6e 20 6f 74 68 65 72  cted on an other
0be0: 77 69 73 65 20 71 75 69 65 73 63 65 6e 74 20 6d  wise quiescent m
0bf0: 61 63 68 69 6e 65 2e 0a 41 20 73 69 6d 70 6c 65  achine..A simple
0c00: 20 54 63 6c 20 73 63 72 69 70 74 20 77 61 73 20   Tcl script was 
0c10: 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
0c20: 20 61 6e 64 20 72 75 6e 20 61 6c 6c 20 74 68 65   and run all the
0c30: 20 74 65 73 74 73 2e 0a 41 20 63 6f 70 79 20 6f   tests..A copy o
0c40: 66 20 74 68 69 73 20 54 63 6c 20 73 63 72 69 70  f this Tcl scrip
0c50: 74 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69  t can be found i
0c60: 6e 20 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75  n the SQLite sou
0c70: 72 63 65 20 74 72 65 65 0a 69 6e 20 74 68 65 20  rce tree.in the 
0c80: 66 69 6c 65 20 3c 62 3e 74 6f 6f 6c 73 2f 73 70  file <b>tools/sp
0c90: 65 65 64 74 65 73 74 2e 74 63 6c 3c 2f 62 3e 2e  eedtest.tcl</b>.
0ca0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 74  .</p>..<p>.The t
0cb0: 69 6d 65 73 20 72 65 70 6f 72 74 65 64 20 6f 6e  imes reported on
0cc0: 20 61 6c 6c 20 74 65 73 74 73 20 72 65 70 72 65   all tests repre
0cd0: 73 65 6e 74 20 77 61 6c 6c 2d 63 6c 6f 63 6b 20  sent wall-clock 
0ce0: 74 69 6d 65 20 0a 69 6e 20 73 65 63 6f 6e 64 73  time .in seconds
0cf0: 2e 20 20 54 77 6f 20 73 65 70 61 72 61 74 65 20  .  Two separate 
0d00: 74 69 6d 65 20 76 61 6c 75 65 73 20 61 72 65 20  time values are 
0d10: 72 65 70 6f 72 74 65 64 20 66 6f 72 20 53 51 4c  reported for SQL
0d20: 69 74 65 2e 0a 54 68 65 20 66 69 72 73 74 20 76  ite..The first v
0d30: 61 6c 75 65 20 69 73 20 66 6f 72 20 53 51 4c 69  alue is for SQLi
0d40: 74 65 20 69 6e 20 69 74 73 20 64 65 66 61 75 6c  te in its defaul
0d50: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  t configuration 
0d60: 77 69 74 68 0a 66 75 6c 6c 20 64 69 73 6b 20 73  with.full disk s
0d70: 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f 6e 20 74  ynchronization t
0d80: 75 72 6e 65 64 20 6f 6e 2e 20 20 57 69 74 68 20  urned on.  With 
0d90: 73 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f 6e 20  synchronization 
0da0: 74 75 72 6e 65 64 0a 6f 6e 2c 20 53 51 4c 69 74  turned.on, SQLit
0db0: 65 20 65 78 65 63 75 74 65 73 0a 61 6e 20 3c 62  e executes.an <b
0dc0: 3e 66 73 79 6e 63 28 29 3c 2f 62 3e 20 73 79 73  >fsync()</b> sys
0dd0: 74 65 6d 20 63 61 6c 6c 20 28 6f 72 20 74 68 65  tem call (or the
0de0: 20 65 71 75 69 76 61 6c 65 6e 74 29 20 61 74 20   equivalent) at 
0df0: 6b 65 79 20 70 6f 69 6e 74 73 0a 74 6f 20 6d 61  key points.to ma
0e00: 6b 65 20 63 65 72 74 61 69 6e 20 74 68 61 74 20  ke certain that 
0e10: 63 72 69 74 69 63 61 6c 20 64 61 74 61 20 68 61  critical data ha
0e20: 73 20 0a 61 63 74 75 61 6c 6c 79 20 62 65 65 6e  s .actually been
0e30: 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20   written to the 
0e40: 64 69 73 6b 20 64 72 69 76 65 20 73 75 72 66 61  disk drive surfa
0e50: 63 65 2e 20 20 53 79 6e 63 68 72 6f 6e 69 7a 61  ce.  Synchroniza
0e60: 74 69 6f 6e 0a 69 73 20 6e 65 63 65 73 73 61 72  tion.is necessar
0e70: 79 20 74 6f 20 67 75 61 72 61 6e 74 65 65 20 74  y to guarantee t
0e80: 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20  he integrity of 
0e90: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 66 20  the database if 
0ea0: 74 68 65 0a 6f 70 65 72 61 74 69 6e 67 20 73 79  the.operating sy
0eb0: 73 74 65 6d 20 63 72 61 73 68 65 73 20 6f 72 20  stem crashes or 
0ec0: 74 68 65 20 63 6f 6d 70 75 74 65 72 20 70 6f 77  the computer pow
0ed0: 65 72 73 20 64 6f 77 6e 20 75 6e 65 78 70 65 63  ers down unexpec
0ee0: 74 65 64 6c 79 0a 69 6e 20 74 68 65 20 6d 69 64  tedly.in the mid
0ef0: 64 6c 65 20 6f 66 20 61 20 64 61 74 61 62 61 73  dle of a databas
0f00: 65 20 75 70 64 61 74 65 2e 20 20 54 68 65 20 73  e update.  The s
0f10: 65 63 6f 6e 64 20 74 69 6d 65 20 72 65 70 6f 72  econd time repor
0f20: 74 65 64 20 66 6f 72 20 53 51 4c 69 74 65 20 69  ted for SQLite i
0f30: 73 0a 77 68 65 6e 20 73 79 6e 63 68 72 6f 6e 69  s.when synchroni
0f40: 7a 61 74 69 6f 6e 20 69 73 20 74 75 72 6e 65 64  zation is turned
0f50: 20 6f 66 66 2e 20 20 57 69 74 68 20 73 79 6e 63   off.  With sync
0f60: 68 72 6f 6e 69 7a 61 74 69 6f 6e 20 6f 66 66 2c  hronization off,
0f70: 0a 53 51 4c 69 74 65 20 69 73 20 73 6f 6d 65 74  .SQLite is somet
0f80: 69 6d 65 73 20 6d 75 63 68 20 66 61 73 74 65 72  imes much faster
0f90: 2c 20 62 75 74 20 74 68 65 72 65 20 69 73 20 61  , but there is a
0fa0: 20 72 69 73 6b 20 74 68 61 74 20 61 6e 0a 6f 70   risk that an.op
0fb0: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 63  erating system c
0fc0: 72 61 73 68 20 6f 72 20 61 6e 20 75 6e 65 78 70  rash or an unexp
0fd0: 65 63 74 65 64 20 70 6f 77 65 72 20 66 61 69 6c  ected power fail
0fe0: 75 72 65 20 63 6f 75 6c 64 0a 64 61 6d 61 67 65  ure could.damage
0ff0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1000: 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69  Generally speaki
1010: 6e 67 2c 20 74 68 65 20 73 79 6e 63 68 72 6f 6e  ng, the synchron
1020: 6f 75 73 20 53 51 4c 69 74 65 0a 74 69 6d 65 73  ous SQLite.times
1030: 20 61 72 65 20 66 6f 72 20 63 6f 6d 70 61 72 69   are for compari
1040: 73 6f 6e 20 61 67 61 69 6e 73 74 20 50 6f 73 74  son against Post
1050: 67 72 65 53 51 4c 20 28 77 68 69 63 68 20 69 73  greSQL (which is
1060: 20 61 6c 73 6f 0a 73 79 6e 63 68 72 6f 6e 6f 75   also.synchronou
1070: 73 29 20 61 6e 64 20 74 68 65 20 61 73 79 6e 63  s) and the async
1080: 68 72 6f 6e 6f 75 73 20 53 51 4c 69 74 65 20 74  hronous SQLite t
1090: 69 6d 65 73 20 61 72 65 20 66 6f 72 20 0a 63 6f  imes are for .co
10a0: 6d 70 61 72 69 73 6f 6e 20 61 67 61 69 6e 73 74  mparison against
10b0: 20 74 68 65 20 61 73 79 6e 63 68 72 6f 6e 6f 75   the asynchronou
10c0: 73 20 4d 79 53 51 4c 20 65 6e 67 69 6e 65 2e 0a  s MySQL engine..
10d0: 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 65 73 74 20 31  </p>..<h3>Test 1
10e0: 3a 20 31 30 30 30 20 49 4e 53 45 52 54 73 3c 2f  : 1000 INSERTs</
10f0: 68 33 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  h3>.<blockquote>
1100: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  .CREATE TABLE t1
1110: 28 61 20 49 4e 54 45 47 45 52 2c 20 62 20 49 4e  (a INTEGER, b IN
1120: 54 45 47 45 52 2c 20 63 20 56 41 52 43 48 41 52  TEGER, c VARCHAR
1130: 28 31 30 30 29 29 3b 3c 62 72 3e 0a 49 4e 53 45  (100));<br>.INSE
1140: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1150: 53 28 31 2c 31 33 31 35 33 2c 27 74 68 69 72 74  S(1,13153,'thirt
1160: 65 65 6e 20 74 68 6f 75 73 61 6e 64 20 6f 6e 65  een thousand one
1170: 20 68 75 6e 64 72 65 64 20 66 69 66 74 79 20 74   hundred fifty t
1180: 68 72 65 65 27 29 3b 3c 62 72 3e 0a 49 4e 53 45  hree');<br>.INSE
1190: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
11a0: 53 28 32 2c 37 35 35 36 30 2c 27 73 65 76 65 6e  S(2,75560,'seven
11b0: 74 79 20 66 69 76 65 20 74 68 6f 75 73 61 6e 64  ty five thousand
11c0: 20 66 69 76 65 20 68 75 6e 64 72 65 64 20 73 69   five hundred si
11d0: 78 74 79 27 29 3b 3c 62 72 3e 0a 3c 69 3e 2e 2e  xty');<br>.<i>..
11e0: 2e 20 39 39 35 20 6c 69 6e 65 73 20 6f 6d 69 74  . 995 lines omit
11f0: 74 65 64 3c 2f 69 3e 3c 62 72 3e 0a 49 4e 53 45  ted</i><br>.INSE
1200: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1210: 53 28 39 39 38 2c 36 36 32 38 39 2c 27 73 69 78  S(998,66289,'six
1220: 74 79 20 73 69 78 20 74 68 6f 75 73 61 6e 64 20  ty six thousand 
1230: 74 77 6f 20 68 75 6e 64 72 65 64 20 65 69 67 68  two hundred eigh
1240: 74 79 20 6e 69 6e 65 27 29 3b 3c 62 72 3e 0a 49  ty nine');<br>.I
1250: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
1260: 4c 55 45 53 28 39 39 39 2c 32 34 33 32 32 2c 27  LUES(999,24322,'
1270: 74 77 65 6e 74 79 20 66 6f 75 72 20 74 68 6f 75  twenty four thou
1280: 73 61 6e 64 20 74 68 72 65 65 20 68 75 6e 64 72  sand three hundr
1290: 65 64 20 74 77 65 6e 74 79 20 74 77 6f 27 29 3b  ed twenty two');
12a0: 3c 62 72 3e 0a 49 4e 53 45 52 54 20 49 4e 54 4f  <br>.INSERT INTO
12b0: 20 74 31 20 56 41 4c 55 45 53 28 31 30 30 30 2c   t1 VALUES(1000,
12c0: 39 34 31 34 32 2c 27 6e 69 6e 65 74 79 20 66 6f  94142,'ninety fo
12d0: 75 72 20 74 68 6f 75 73 61 6e 64 20 6f 6e 65 20  ur thousand one 
12e0: 68 75 6e 64 72 65 64 20 66 6f 72 74 79 20 74 77  hundred forty tw
12f0: 6f 27 29 3b 3c 62 72 3e 0a 0a 3c 2f 62 6c 6f 63  o');<br>..</bloc
1300: 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f  kquote><table bo
1310: 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69  rder=0 cellpaddi
1320: 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67  ng=0 cellspacing
1330: 3d 30 3e 0a 3c 74 72 3e 3c 74 64 3e 50 6f 73 74  =0>.<tr><td>Post
1340: 67 72 65 53 51 4c 3a 3c 2f 74 64 3e 3c 74 64 20  greSQL:</td><td 
1350: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e  align="right">&n
1360: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
1370: 34 2e 33 37 33 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  4.373</td></tr>.
1380: 3c 74 72 3e 3c 74 64 3e 4d 79 53 51 4c 3a 3c 2f  <tr><td>MySQL:</
1390: 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  td><td align="ri
13a0: 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70  ght">&nbsp;&nbsp
13b0: 3b 26 6e 62 73 70 3b 30 2e 31 31 34 3c 2f 74 64  ;&nbsp;0.114</td
13c0: 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 53  ></tr>.<tr><td>S
13d0: 51 4c 69 74 65 20 32 2e 37 2e 36 3a 3c 2f 74 64  QLite 2.7.6:</td
13e0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  ><td align="righ
13f0: 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  t">&nbsp;&nbsp;&
1400: 6e 62 73 70 3b 31 33 2e 30 36 31 3c 2f 74 64 3e  nbsp;13.061</td>
1410: 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 53 51  </tr>.<tr><td>SQ
1420: 4c 69 74 65 20 32 2e 37 2e 36 20 28 6e 6f 73 79  Lite 2.7.6 (nosy
1430: 6e 63 29 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69  nc):</td><td ali
1440: 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73 70  gn="right">&nbsp
1450: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 30 2e 32  ;&nbsp;&nbsp;0.2
1460: 32 33 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74  23</td></tr>.</t
1470: 61 62 6c 65 3e 0a 0a 3c 70 3e 0a 42 65 63 61 75  able>..<p>.Becau
1480: 73 65 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 68  se it does not h
1490: 61 76 65 20 61 20 63 65 6e 74 72 61 6c 20 73 65  ave a central se
14a0: 72 76 65 72 20 74 6f 20 63 6f 6f 72 64 69 6e 61  rver to coordina
14b0: 74 65 20 61 63 63 65 73 73 2c 0a 53 51 4c 69 74  te access,.SQLit
14c0: 65 20 6d 75 73 74 20 63 6c 6f 73 65 20 61 6e 64  e must close and
14d0: 20 72 65 6f 70 65 6e 20 74 68 65 20 64 61 74 61   reopen the data
14e0: 62 61 73 65 20 66 69 6c 65 2c 20 61 6e 64 20 74  base file, and t
14f0: 68 75 73 20 69 6e 76 61 6c 69 64 61 74 65 0a 69  hus invalidate.i
1500: 74 73 20 63 61 63 68 65 2c 20 66 6f 72 20 65 61  ts cache, for ea
1510: 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  ch transaction. 
1520: 20 49 6e 20 74 68 69 73 20 74 65 73 74 2c 20 65   In this test, e
1530: 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ach SQL statemen
1540: 74 0a 69 73 20 61 20 73 65 70 61 72 61 74 65 20  t.is a separate 
1550: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 6f 20 74  transaction so t
1560: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1570: 20 6d 75 73 74 20 62 65 20 6f 70 65 6e 65 64 20   must be opened 
1580: 61 6e 64 20 63 6c 6f 73 65 64 0a 61 6e 64 20 74  and closed.and t
1590: 68 65 20 63 61 63 68 65 20 6d 75 73 74 20 62 65  he cache must be
15a0: 20 66 6c 75 73 68 65 64 20 31 30 30 30 20 74 69   flushed 1000 ti
15b0: 6d 65 73 2e 20 20 49 6e 20 73 70 69 74 65 20 6f  mes.  In spite o
15c0: 66 20 74 68 69 73 2c 20 74 68 65 20 61 73 79 6e  f this, the asyn
15d0: 63 68 72 6f 6e 6f 75 73 0a 76 65 72 73 69 6f 6e  chronous.version
15e0: 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 73 74   of SQLite is st
15f0: 69 6c 6c 20 6e 65 61 72 6c 79 20 61 73 20 66 61  ill nearly as fa
1600: 73 74 20 61 73 20 4d 79 53 51 4c 2e 20 20 4e 6f  st as MySQL.  No
1610: 74 69 63 65 20 68 6f 77 20 6d 75 63 68 20 73 6c  tice how much sl
1620: 6f 77 65 72 0a 74 68 65 20 73 79 6e 63 68 72 6f  ower.the synchro
1630: 6e 6f 75 73 20 76 65 72 73 69 6f 6e 20 69 73 2c  nous version is,
1640: 20 68 6f 77 65 76 65 72 2e 20 20 53 51 4c 69 74   however.  SQLit
1650: 65 20 63 61 6c 6c 73 20 3c 62 3e 66 73 79 6e 63  e calls <b>fsync
1660: 28 29 3c 2f 62 3e 20 61 66 74 65 72 20 0a 65 61  ()</b> after .ea
1670: 63 68 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 74  ch synchronous t
1680: 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 6d 61  ransaction to ma
1690: 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6c 6c  ke sure that all
16a0: 20 64 61 74 61 20 69 73 20 73 61 66 65 6c 79 20   data is safely 
16b0: 6f 6e 0a 74 68 65 20 64 69 73 6b 20 73 75 72 66  on.the disk surf
16c0: 61 63 65 20 62 65 66 6f 72 65 20 63 6f 6e 74 69  ace before conti
16d0: 6e 75 69 6e 67 2e 20 20 46 6f 72 20 6d 6f 73 74  nuing.  For most
16e0: 20 6f 66 20 74 68 65 20 31 33 20 73 65 63 6f 6e   of the 13 secon
16f0: 64 73 20 69 6e 20 74 68 65 0a 73 79 6e 63 68 72  ds in the.synchr
1700: 6f 6e 6f 75 73 20 74 65 73 74 2c 20 53 51 4c 69  onous test, SQLi
1710: 74 65 20 77 61 73 20 73 69 74 74 69 6e 67 20 69  te was sitting i
1720: 64 6c 65 20 77 61 69 74 69 6e 67 20 6f 6e 20 64  dle waiting on d
1730: 69 73 6b 20 49 2f 4f 20 74 6f 20 63 6f 6d 70 6c  isk I/O to compl
1740: 65 74 65 2e 3c 2f 70 3e 0a 0a 0a 3c 68 33 3e 54  ete.</p>...<h3>T
1750: 65 73 74 20 32 3a 20 32 35 30 30 30 20 49 4e 53  est 2: 25000 INS
1760: 45 52 54 73 20 69 6e 20 61 20 74 72 61 6e 73 61  ERTs in a transa
1770: 63 74 69 6f 6e 3c 2f 68 33 3e 0a 3c 62 6c 6f 63  ction</h3>.<bloc
1780: 6b 71 75 6f 74 65 3e 0a 42 45 47 49 4e 3b 3c 62  kquote>.BEGIN;<b
1790: 72 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  r>.CREATE TABLE 
17a0: 74 32 28 61 20 49 4e 54 45 47 45 52 2c 20 62 20  t2(a INTEGER, b 
17b0: 49 4e 54 45 47 45 52 2c 20 63 20 56 41 52 43 48  INTEGER, c VARCH
17c0: 41 52 28 31 30 30 29 29 3b 3c 62 72 3e 0a 49 4e  AR(100));<br>.IN
17d0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
17e0: 55 45 53 28 31 2c 35 39 36 37 32 2c 27 66 69 66  UES(1,59672,'fif
17f0: 74 79 20 6e 69 6e 65 20 74 68 6f 75 73 61 6e 64  ty nine thousand
1800: 20 73 69 78 20 68 75 6e 64 72 65 64 20 73 65 76   six hundred sev
1810: 65 6e 74 79 20 74 77 6f 27 29 3b 3c 62 72 3e 0a  enty two');<br>.
1820: 3c 69 3e 2e 2e 2e 20 32 34 39 39 37 20 6c 69 6e  <i>... 24997 lin
1830: 65 73 20 6f 6d 69 74 74 65 64 3c 2f 69 3e 3c 62  es omitted</i><b
1840: 72 3e 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  r>.INSERT INTO t
1850: 32 20 56 41 4c 55 45 53 28 32 34 39 39 39 2c 38  2 VALUES(24999,8
1860: 39 35 36 39 2c 27 65 69 67 68 74 79 20 6e 69 6e  9569,'eighty nin
1870: 65 20 74 68 6f 75 73 61 6e 64 20 66 69 76 65 20  e thousand five 
1880: 68 75 6e 64 72 65 64 20 73 69 78 74 79 20 6e 69  hundred sixty ni
1890: 6e 65 27 29 3b 3c 62 72 3e 0a 49 4e 53 45 52 54  ne');<br>.INSERT
18a0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
18b0: 32 35 30 30 30 2c 39 34 36 36 36 2c 27 6e 69 6e  25000,94666,'nin
18c0: 65 74 79 20 66 6f 75 72 20 74 68 6f 75 73 61 6e  ety four thousan
18d0: 64 20 73 69 78 20 68 75 6e 64 72 65 64 20 73 69  d six hundred si
18e0: 78 74 79 20 73 69 78 27 29 3b 3c 62 72 3e 0a 43  xty six');<br>.C
18f0: 4f 4d 4d 49 54 3b 3c 62 72 3e 0a 0a 3c 2f 62 6c  OMMIT;<br>..</bl
1900: 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20  ockquote><table 
1910: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
1920: 64 69 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69  ding=0 cellspaci
1930: 6e 67 3d 30 3e 0a 3c 74 72 3e 3c 74 64 3e 50 6f  ng=0>.<tr><td>Po
1940: 73 74 67 72 65 53 51 4c 3a 3c 2f 74 64 3e 3c 74  stgreSQL:</td><t
1950: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  d align="right">
1960: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
1970: 70 3b 34 2e 39 30 30 3c 2f 74 64 3e 3c 2f 74 72  p;4.900</td></tr
1980: 3e 0a 3c 74 72 3e 3c 74 64 3e 4d 79 53 51 4c 3a  >.<tr><td>MySQL:
1990: 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22  </td><td align="
19a0: 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62  right">&nbsp;&nb
19b0: 73 70 3b 26 6e 62 73 70 3b 32 2e 31 38 34 3c 2f  sp;&nbsp;2.184</
19c0: 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64  td></tr>.<tr><td
19d0: 3e 53 51 4c 69 74 65 20 32 2e 37 2e 36 3a 3c 2f  >SQLite 2.7.6:</
19e0: 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  td><td align="ri
19f0: 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70  ght">&nbsp;&nbsp
1a00: 3b 26 6e 62 73 70 3b 30 2e 39 31 34 3c 2f 74 64  ;&nbsp;0.914</td
1a10: 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 53  ></tr>.<tr><td>S
1a20: 51 4c 69 74 65 20 32 2e 37 2e 36 20 28 6e 6f 73  QLite 2.7.6 (nos
1a30: 79 6e 63 29 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c  ync):</td><td al
1a40: 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73  ign="right">&nbs
1a50: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 30 2e  p;&nbsp;&nbsp;0.
1a60: 37 35 37 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f  757</td></tr>.</
1a70: 74 61 62 6c 65 3e 0a 0a 3c 70 3e 0a 57 68 65 6e  table>..<p>.When
1a80: 20 61 6c 6c 20 74 68 65 20 49 4e 53 45 52 54 73   all the INSERTs
1a90: 20 61 72 65 20 70 75 74 20 69 6e 20 61 20 74 72   are put in a tr
1aa0: 61 6e 73 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74  ansaction, SQLit
1ab0: 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 68 61 73 20  e no longer has 
1ac0: 74 6f 0a 63 6c 6f 73 65 20 61 6e 64 20 72 65 6f  to.close and reo
1ad0: 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  pen the database
1ae0: 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20 69   or invalidate i
1af0: 74 73 20 63 61 63 68 65 20 62 65 74 77 65 65 6e  ts cache between
1b00: 20 65 61 63 68 20 73 74 61 74 65 6d 65 6e 74 2e   each statement.
1b10: 0a 49 74 20 61 6c 73 6f 20 64 6f 65 73 20 6e 6f  .It also does no
1b20: 74 0a 68 61 76 65 20 74 6f 20 64 6f 20 61 6e 79  t.have to do any
1b30: 20 66 73 79 6e 63 28 29 73 20 75 6e 74 69 6c 20   fsync()s until 
1b40: 74 68 65 20 76 65 72 79 20 65 6e 64 2e 20 20 57  the very end.  W
1b50: 68 65 6e 20 75 6e 73 68 61 63 6b 6c 65 64 20 69  hen unshackled i
1b60: 6e 0a 74 68 69 73 20 77 61 79 2c 20 53 51 4c 69  n.this way, SQLi
1b70: 74 65 20 69 73 20 6d 75 63 68 20 66 61 73 74 65  te is much faste
1b80: 72 20 74 68 61 6e 20 65 69 74 68 65 72 20 50 6f  r than either Po
1b90: 73 74 67 72 65 53 51 4c 20 61 6e 64 20 4d 79 53  stgreSQL and MyS
1ba0: 51 4c 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 65  QL..</p>..<h3>Te
1bb0: 73 74 20 33 3a 20 32 35 30 30 30 20 49 4e 53 45  st 3: 25000 INSE
1bc0: 52 54 73 20 69 6e 74 6f 20 61 6e 20 69 6e 64 65  RTs into an inde
1bd0: 78 65 64 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 3c  xed table</h3>.<
1be0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 42 45 47 49  blockquote>.BEGI
1bf0: 4e 3b 3c 62 72 3e 0a 43 52 45 41 54 45 20 54 41  N;<br>.CREATE TA
1c00: 42 4c 45 20 74 33 28 61 20 49 4e 54 45 47 45 52  BLE t3(a INTEGER
1c10: 2c 20 62 20 49 4e 54 45 47 45 52 2c 20 63 20 56  , b INTEGER, c V
1c20: 41 52 43 48 41 52 28 31 30 30 29 29 3b 3c 62 72  ARCHAR(100));<br
1c30: 3e 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20 69  >.CREATE INDEX i
1c40: 33 20 4f 4e 20 74 33 28 63 29 3b 3c 62 72 3e 0a  3 ON t3(c);<br>.
1c50: 3c 69 3e 2e 2e 2e 20 32 34 39 39 38 20 6c 69 6e  <i>... 24998 lin
1c60: 65 73 20 6f 6d 69 74 74 65 64 3c 2f 69 3e 3c 62  es omitted</i><b
1c70: 72 3e 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  r>.INSERT INTO t
1c80: 33 20 56 41 4c 55 45 53 28 32 34 39 39 39 2c 38  3 VALUES(24999,8
1c90: 38 35 30 39 2c 27 65 69 67 68 74 79 20 65 69 67  8509,'eighty eig
1ca0: 68 74 20 74 68 6f 75 73 61 6e 64 20 66 69 76 65  ht thousand five
1cb0: 20 68 75 6e 64 72 65 64 20 6e 69 6e 65 27 29 3b   hundred nine');
1cc0: 3c 62 72 3e 0a 49 4e 53 45 52 54 20 49 4e 54 4f  <br>.INSERT INTO
1cd0: 20 74 33 20 56 41 4c 55 45 53 28 32 35 30 30 30   t3 VALUES(25000
1ce0: 2c 38 34 37 39 31 2c 27 65 69 67 68 74 79 20 66  ,84791,'eighty f
1cf0: 6f 75 72 20 74 68 6f 75 73 61 6e 64 20 73 65 76  our thousand sev
1d00: 65 6e 20 68 75 6e 64 72 65 64 20 6e 69 6e 65 74  en hundred ninet
1d10: 79 20 6f 6e 65 27 29 3b 3c 62 72 3e 0a 43 4f 4d  y one');<br>.COM
1d20: 4d 49 54 3b 3c 62 72 3e 0a 0a 3c 2f 62 6c 6f 63  MIT;<br>..</bloc
1d30: 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f  kquote><table bo
1d40: 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69  rder=0 cellpaddi
1d50: 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67  ng=0 cellspacing
1d60: 3d 30 3e 0a 3c 74 72 3e 3c 74 64 3e 50 6f 73 74  =0>.<tr><td>Post
1d70: 67 72 65 53 51 4c 3a 3c 2f 74 64 3e 3c 74 64 20  greSQL:</td><td 
1d80: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e  align="right">&n
1d90: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
1da0: 38 2e 31 37 35 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  8.175</td></tr>.
1db0: 3c 74 72 3e 3c 74 64 3e 4d 79 53 51 4c 3a 3c 2f  <tr><td>MySQL:</
1dc0: 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  td><td align="ri
1dd0: 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70  ght">&nbsp;&nbsp
1de0: 3b 26 6e 62 73 70 3b 33 2e 31 39 37 3c 2f 74 64  ;&nbsp;3.197</td
1df0: 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 53  ></tr>.<tr><td>S
1e00: 51 4c 69 74 65 20 32 2e 37 2e 36 3a 3c 2f 74 64  QLite 2.7.6:</td
1e10: 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  ><td align="righ
1e20: 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  t">&nbsp;&nbsp;&
1e30: 6e 62 73 70 3b 31 2e 35 35 35 3c 2f 74 64 3e 3c  nbsp;1.555</td><
1e40: 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 53 51 4c  /tr>.<tr><td>SQL
1e50: 69 74 65 20 32 2e 37 2e 36 20 28 6e 6f 73 79 6e  ite 2.7.6 (nosyn
1e60: 63 29 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67  c):</td><td alig
1e70: 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73 70 3b  n="right">&nbsp;
1e80: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 31 2e 34 30  &nbsp;&nbsp;1.40
1e90: 32 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61  2</td></tr>.</ta
1ea0: 62 6c 65 3e 0a 0a 3c 70 3e 0a 54 68 65 72 65 20  ble>..<p>.There 
1eb0: 77 65 72 65 20 72 65 70 6f 72 74 73 20 74 68 61  were reports tha
1ec0: 74 20 53 51 4c 69 74 65 20 64 69 64 20 6e 6f 74  t SQLite did not
1ed0: 20 70 65 72 66 6f 72 6d 20 61 73 20 77 65 6c 6c   perform as well
1ee0: 20 6f 6e 20 61 6e 20 69 6e 64 65 78 65 64 20 74   on an indexed t
1ef0: 61 62 6c 65 2e 0a 54 68 69 73 20 74 65 73 74 20  able..This test 
1f00: 77 61 73 20 72 65 63 65 6e 74 6c 79 20 61 64 64  was recently add
1f10: 65 64 20 74 6f 20 64 69 73 70 72 6f 76 65 20 74  ed to disprove t
1f20: 68 6f 73 65 20 72 75 6d 6f 72 73 2e 20 20 49 74  hose rumors.  It
1f30: 20 69 73 20 74 72 75 65 20 74 68 61 74 0a 53 51   is true that.SQ
1f40: 4c 69 74 65 20 69 73 20 6e 6f 74 20 61 73 20 66  Lite is not as f
1f50: 61 73 74 20 61 74 20 63 72 65 61 74 69 6e 67 20  ast at creating 
1f60: 6e 65 77 20 69 6e 64 65 78 20 65 6e 74 72 69 65  new index entrie
1f70: 73 20 61 73 20 74 68 65 20 6f 74 68 65 72 20 65  s as the other e
1f80: 6e 67 69 6e 65 73 0a 28 73 65 65 20 54 65 73 74  ngines.(see Test
1f90: 20 36 20 62 65 6c 6f 77 29 20 62 75 74 20 69 74   6 below) but it
1fa0: 73 20 6f 76 65 72 61 6c 6c 20 73 70 65 65 64 20  s overall speed 
1fb0: 69 73 20 73 74 69 6c 6c 20 62 65 74 74 65 72 2e  is still better.
1fc0: 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 65 73 74 20  .</p>..<h3>Test 
1fd0: 34 3a 20 31 30 30 20 53 45 4c 45 43 54 73 20 77  4: 100 SELECTs w
1fe0: 69 74 68 6f 75 74 20 61 6e 20 69 6e 64 65 78 3c  ithout an index<
1ff0: 2f 68 33 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /h3>.<blockquote
2000: 3e 0a 42 45 47 49 4e 3b 3c 62 72 3e 0a 53 45 4c  >.BEGIN;<br>.SEL
2010: 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c 20 61 76  ECT count(*), av
2020: 67 28 62 29 20 46 52 4f 4d 20 74 32 20 57 48 45  g(b) FROM t2 WHE
2030: 52 45 20 62 3e 3d 30 20 41 4e 44 20 62 3c 31 30  RE b>=0 AND b<10
2040: 30 30 3b 3c 62 72 3e 0a 53 45 4c 45 43 54 20 63  00;<br>.SELECT c
2050: 6f 75 6e 74 28 2a 29 2c 20 61 76 67 28 62 29 20  ount(*), avg(b) 
2060: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3e  FROM t2 WHERE b>
2070: 3d 31 30 30 20 41 4e 44 20 62 3c 31 31 30 30 3b  =100 AND b<1100;
2080: 3c 62 72 3e 0a 3c 69 3e 2e 2e 2e 20 39 36 20 6c  <br>.<i>... 96 l
2090: 69 6e 65 73 20 6f 6d 69 74 74 65 64 3c 2f 69 3e  ines omitted</i>
20a0: 3c 62 72 3e 0a 53 45 4c 45 43 54 20 63 6f 75 6e  <br>.SELECT coun
20b0: 74 28 2a 29 2c 20 61 76 67 28 62 29 20 46 52 4f  t(*), avg(b) FRO
20c0: 4d 20 74 32 20 57 48 45 52 45 20 62 3e 3d 39 38  M t2 WHERE b>=98
20d0: 30 30 20 41 4e 44 20 62 3c 31 30 38 30 30 3b 3c  00 AND b<10800;<
20e0: 62 72 3e 0a 53 45 4c 45 43 54 20 63 6f 75 6e 74  br>.SELECT count
20f0: 28 2a 29 2c 20 61 76 67 28 62 29 20 46 52 4f 4d  (*), avg(b) FROM
2100: 20 74 32 20 57 48 45 52 45 20 62 3e 3d 39 39 30   t2 WHERE b>=990
2110: 30 20 41 4e 44 20 62 3c 31 30 39 30 30 3b 3c 62  0 AND b<10900;<b
2120: 72 3e 0a 43 4f 4d 4d 49 54 3b 3c 62 72 3e 0a 0a  r>.COMMIT;<br>..
2130: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61  </blockquote><ta
2140: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
2150: 6c 70 61 64 64 69 6e 67 3d 30 20 63 65 6c 6c 73  lpadding=0 cells
2160: 70 61 63 69 6e 67 3d 30 3e 0a 3c 74 72 3e 3c 74  pacing=0>.<tr><t
2170: 64 3e 50 6f 73 74 67 72 65 53 51 4c 3a 3c 2f 74  d>PostgreSQL:</t
2180: 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  d><td align="rig
2190: 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b  ht">&nbsp;&nbsp;
21a0: 26 6e 62 73 70 3b 33 2e 36 32 39 3c 2f 74 64 3e  &nbsp;3.629</td>
21b0: 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 4d 79  </tr>.<tr><td>My
21c0: 53 51 4c 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69  SQL:</td><td ali
21d0: 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73 70  gn="right">&nbsp
21e0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 32 2e 37  ;&nbsp;&nbsp;2.7
21f0: 36 30 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72  60</td></tr>.<tr
2200: 3e 3c 74 64 3e 53 51 4c 69 74 65 20 32 2e 37 2e  ><td>SQLite 2.7.
2210: 36 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e  6:</td><td align
2220: 3d 22 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26  ="right">&nbsp;&
2230: 6e 62 73 70 3b 26 6e 62 73 70 3b 32 2e 34 39 34  nbsp;&nbsp;2.494
2240: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c  </td></tr>.<tr><
2250: 74 64 3e 53 51 4c 69 74 65 20 32 2e 37 2e 36 20  td>SQLite 2.7.6 
2260: 28 6e 6f 73 79 6e 63 29 3a 3c 2f 74 64 3e 3c 74  (nosync):</td><t
2270: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  d align="right">
2280: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
2290: 70 3b 32 2e 35 32 36 3c 2f 74 64 3e 3c 2f 74 72  p;2.526</td></tr
22a0: 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 0a 3c 70 3e  >.</table>...<p>
22b0: 0a 54 68 69 73 20 74 65 73 74 20 64 6f 65 73 20  .This test does 
22c0: 31 30 30 20 71 75 65 72 69 65 73 20 6f 6e 20 61  100 queries on a
22d0: 20 32 35 30 30 30 20 65 6e 74 72 79 20 74 61 62   25000 entry tab
22e0: 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 20 69 6e  le without an in
22f0: 64 65 78 2c 0a 74 68 75 73 20 72 65 71 75 69 72  dex,.thus requir
2300: 69 6e 67 20 61 20 66 75 6c 6c 20 74 61 62 6c 65  ing a full table
2310: 20 73 63 61 6e 2e 20 20 20 50 72 69 6f 72 20 76   scan.   Prior v
2320: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2330: 65 20 75 73 65 64 20 74 6f 0a 62 65 20 73 6c 6f  e used to.be slo
2340: 77 65 72 20 74 68 61 6e 20 50 6f 73 74 67 72 65  wer than Postgre
2350: 53 51 4c 20 61 6e 64 20 4d 79 53 51 4c 20 6f 6e  SQL and MySQL on
2360: 20 74 68 69 73 20 74 65 73 74 2c 20 62 75 74 20   this test, but 
2370: 72 65 63 65 6e 74 20 70 65 72 66 6f 72 6d 61 6e  recent performan
2380: 63 65 0a 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20  ce.enhancements 
2390: 68 61 76 65 20 69 6e 63 72 65 61 73 65 64 20 69  have increased i
23a0: 74 73 20 73 70 65 65 64 20 73 6f 20 74 68 61 74  ts speed so that
23b0: 20 69 74 20 69 73 20 6e 6f 77 20 74 68 65 20 66   it is now the f
23c0: 61 73 74 65 73 74 0a 6f 66 20 74 68 65 20 67 72  astest.of the gr
23d0: 6f 75 70 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54  oup..</p>..<h3>T
23e0: 65 73 74 20 35 3a 20 31 30 30 20 53 45 4c 45 43  est 5: 100 SELEC
23f0: 54 73 20 6f 6e 20 61 20 73 74 72 69 6e 67 20 63  Ts on a string c
2400: 6f 6d 70 61 72 69 73 6f 6e 3c 2f 68 33 3e 0a 3c  omparison</h3>.<
2410: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 42 45 47 49  blockquote>.BEGI
2420: 4e 3b 3c 62 72 3e 0a 53 45 4c 45 43 54 20 63 6f  N;<br>.SELECT co
2430: 75 6e 74 28 2a 29 2c 20 61 76 67 28 62 29 20 46  unt(*), avg(b) F
2440: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 63 20 4c  ROM t2 WHERE c L
2450: 49 4b 45 20 27 25 6f 6e 65 25 27 3b 3c 62 72 3e  IKE '%one%';<br>
2460: 0a 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  .SELECT count(*)
2470: 2c 20 61 76 67 28 62 29 20 46 52 4f 4d 20 74 32  , avg(b) FROM t2
2480: 20 57 48 45 52 45 20 63 20 4c 49 4b 45 20 27 25   WHERE c LIKE '%
2490: 74 77 6f 25 27 3b 3c 62 72 3e 0a 3c 69 3e 2e 2e  two%';<br>.<i>..
24a0: 2e 20 39 36 20 6c 69 6e 65 73 20 6f 6d 69 74 74  . 96 lines omitt
24b0: 65 64 3c 2f 69 3e 3c 62 72 3e 0a 53 45 4c 45 43  ed</i><br>.SELEC
24c0: 54 20 63 6f 75 6e 74 28 2a 29 2c 20 61 76 67 28  T count(*), avg(
24d0: 62 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  b) FROM t2 WHERE
24e0: 20 63 20 4c 49 4b 45 20 27 25 6e 69 6e 65 74 79   c LIKE '%ninety
24f0: 20 6e 69 6e 65 25 27 3b 3c 62 72 3e 0a 53 45 4c   nine%';<br>.SEL
2500: 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c 20 61 76  ECT count(*), av
2510: 67 28 62 29 20 46 52 4f 4d 20 74 32 20 57 48 45  g(b) FROM t2 WHE
2520: 52 45 20 63 20 4c 49 4b 45 20 27 25 6f 6e 65 20  RE c LIKE '%one 
2530: 68 75 6e 64 72 65 64 25 27 3b 3c 62 72 3e 0a 43  hundred%';<br>.C
2540: 4f 4d 4d 49 54 3b 3c 62 72 3e 0a 0a 3c 2f 62 6c  OMMIT;<br>..</bl
2550: 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20  ockquote><table 
2560: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
2570: 64 69 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69  ding=0 cellspaci
2580: 6e 67 3d 30 3e 0a 3c 74 72 3e 3c 74 64 3e 50 6f  ng=0>.<tr><td>Po
2590: 73 74 67 72 65 53 51 4c 3a 3c 2f 74 64 3e 3c 74  stgreSQL:</td><t
25a0: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  d align="right">
25b0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
25c0: 70 3b 31 33 2e 34 30 39 3c 2f 74 64 3e 3c 2f 74  p;13.409</td></t
25d0: 72 3e 0a 3c 74 72 3e 3c 74 64 3e 4d 79 53 51 4c  r>.<tr><td>MySQL
25e0: 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d  :</td><td align=
25f0: 22 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e  "right">&nbsp;&n
2600: 62 73 70 3b 26 6e 62 73 70 3b 34 2e 36 34 30 3c  bsp;&nbsp;4.640<
2610: 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74  /td></tr>.<tr><t
2620: 64 3e 53 51 4c 69 74 65 20 32 2e 37 2e 36 3a 3c  d>SQLite 2.7.6:<
2630: 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72  /td><td align="r
2640: 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73  ight">&nbsp;&nbs
2650: 70 3b 26 6e 62 73 70 3b 33 2e 33 36 32 3c 2f 74  p;&nbsp;3.362</t
2660: 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e  d></tr>.<tr><td>
2670: 53 51 4c 69 74 65 20 32 2e 37 2e 36 20 28 6e 6f  SQLite 2.7.6 (no
2680: 73 79 6e 63 29 3a 3c 2f 74 64 3e 3c 74 64 20 61  sync):</td><td a
2690: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62  lign="right">&nb
26a0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 33  sp;&nbsp;&nbsp;3
26b0: 2e 33 37 32 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  .372</td></tr>.<
26c0: 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 0a 54 68 69  /table>..<p>.Thi
26d0: 73 20 74 65 73 74 20 73 74 69 6c 6c 20 64 6f 65  s test still doe
26e0: 73 20 31 30 30 20 66 75 6c 6c 20 74 61 62 6c 65  s 100 full table
26f0: 20 73 63 61 6e 73 20 62 75 74 20 69 74 20 75 73   scans but it us
2700: 65 73 0a 75 73 65 73 20 73 74 72 69 6e 67 20 63  es.uses string c
2710: 6f 6d 70 61 72 69 73 6f 6e 73 20 69 6e 73 74 65  omparisons inste
2720: 61 64 20 6f 66 20 6e 75 6d 65 72 69 63 61 6c 20  ad of numerical 
2730: 63 6f 6d 70 61 72 69 73 69 6f 6e 73 2e 0a 53 51  comparisions..SQ
2740: 4c 69 74 65 20 69 73 20 6f 76 65 72 20 74 68 72  Lite is over thr
2750: 65 65 20 74 69 6d 65 73 20 66 61 73 74 65 72 20  ee times faster 
2760: 74 68 61 6e 20 50 6f 73 74 67 72 65 53 51 4c 20  than PostgreSQL 
2770: 68 65 72 65 20 61 6e 64 20 61 62 6f 75 74 20 33  here and about 3
2780: 30 25 0a 66 61 73 74 65 72 20 74 68 61 6e 20 4d  0%.faster than M
2790: 79 53 51 4c 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e  ySQL..</p>..<h3>
27a0: 54 65 73 74 20 36 3a 20 43 72 65 61 74 69 6e 67  Test 6: Creating
27b0: 20 61 6e 20 69 6e 64 65 78 3c 2f 68 33 3e 0a 3c   an index</h3>.<
27c0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 43 52 45 41  blockquote>.CREA
27d0: 54 45 20 49 4e 44 45 58 20 69 32 61 20 4f 4e 20  TE INDEX i2a ON 
27e0: 74 32 28 61 29 3b 3c 62 72 3e 43 52 45 41 54 45  t2(a);<br>CREATE
27f0: 20 49 4e 44 45 58 20 69 32 62 20 4f 4e 20 74 32   INDEX i2b ON t2
2800: 28 62 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  (b);.</blockquot
2810: 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  e><table border=
2820: 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 30 20  0 cellpadding=0 
2830: 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 3e 0a 3c  cellspacing=0>.<
2840: 74 72 3e 3c 74 64 3e 50 6f 73 74 67 72 65 53 51  tr><td>PostgreSQ
2850: 4c 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e  L:</td><td align
2860: 3d 22 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26  ="right">&nbsp;&
2870: 6e 62 73 70 3b 26 6e 62 73 70 3b 30 2e 33 38 31  nbsp;&nbsp;0.381
2880: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c  </td></tr>.<tr><
2890: 74 64 3e 4d 79 53 51 4c 3a 3c 2f 74 64 3e 3c 74  td>MySQL:</td><t
28a0: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  d align="right">
28b0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
28c0: 70 3b 30 2e 33 31 38 3c 2f 74 64 3e 3c 2f 74 72  p;0.318</td></tr
28d0: 3e 0a 3c 74 72 3e 3c 74 64 3e 53 51 4c 69 74 65  >.<tr><td>SQLite
28e0: 20 32 2e 37 2e 36 3a 3c 2f 74 64 3e 3c 74 64 20   2.7.6:</td><td 
28f0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e  align="right">&n
2900: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
2910: 30 2e 37 37 37 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  0.777</td></tr>.
2920: 3c 74 72 3e 3c 74 64 3e 53 51 4c 69 74 65 20 32  <tr><td>SQLite 2
2930: 2e 37 2e 36 20 28 6e 6f 73 79 6e 63 29 3a 3c 2f  .7.6 (nosync):</
2940: 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  td><td align="ri
2950: 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70  ght">&nbsp;&nbsp
2960: 3b 26 6e 62 73 70 3b 30 2e 36 35 39 3c 2f 74 64  ;&nbsp;0.659</td
2970: 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  ></tr>.</table>.
2980: 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 69 73 20 73  .<p>.SQLite is s
2990: 6c 6f 77 65 72 20 61 74 20 63 72 65 61 74 69 6e  lower at creatin
29a0: 67 20 6e 65 77 20 69 6e 64 69 63 65 73 2e 20 20  g new indices.  
29b0: 54 68 69 73 20 69 73 20 6e 6f 74 20 61 20 68 75  This is not a hu
29c0: 67 65 20 70 72 6f 62 6c 65 6d 0a 28 73 69 6e 63  ge problem.(sinc
29d0: 65 20 6e 65 77 20 69 6e 64 69 63 65 73 20 61 72  e new indices ar
29e0: 65 20 6e 6f 74 20 63 72 65 61 74 65 64 20 76 65  e not created ve
29f0: 72 79 20 6f 66 74 65 6e 29 20 62 75 74 20 69 74  ry often) but it
2a00: 20 69 73 20 73 6f 6d 65 74 68 69 6e 67 20 74 68   is something th
2a10: 61 74 0a 69 73 20 62 65 69 6e 67 20 77 6f 72 6b  at.is being work
2a20: 65 64 20 6f 6e 2e 20 20 48 6f 70 65 66 75 6c 6c  ed on.  Hopefull
2a30: 79 2c 20 66 75 74 75 72 65 20 76 65 72 73 69 6f  y, future versio
2a40: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 69 6c  ns of SQLite wil
2a50: 6c 20 64 6f 20 62 65 74 74 65 72 0a 68 65 72 65  l do better.here
2a60: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 65 73 74  ..</p>..<h3>Test
2a70: 20 37 3a 20 35 30 30 30 20 53 45 4c 45 43 54 73   7: 5000 SELECTs
2a80: 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78 3c 2f   with an index</
2a90: 68 33 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  h3>.<blockquote>
2aa0: 0a 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  .SELECT count(*)
2ab0: 2c 20 61 76 67 28 62 29 20 46 52 4f 4d 20 74 32  , avg(b) FROM t2
2ac0: 20 57 48 45 52 45 20 62 3e 3d 30 20 41 4e 44 20   WHERE b>=0 AND 
2ad0: 62 3c 31 30 30 3b 3c 62 72 3e 0a 53 45 4c 45 43  b<100;<br>.SELEC
2ae0: 54 20 63 6f 75 6e 74 28 2a 29 2c 20 61 76 67 28  T count(*), avg(
2af0: 62 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  b) FROM t2 WHERE
2b00: 20 62 3e 3d 31 30 30 20 41 4e 44 20 62 3c 32 30   b>=100 AND b<20
2b10: 30 3b 3c 62 72 3e 0a 53 45 4c 45 43 54 20 63 6f  0;<br>.SELECT co
2b20: 75 6e 74 28 2a 29 2c 20 61 76 67 28 62 29 20 46  unt(*), avg(b) F
2b30: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3e 3d  ROM t2 WHERE b>=
2b40: 32 30 30 20 41 4e 44 20 62 3c 33 30 30 3b 3c 62  200 AND b<300;<b
2b50: 72 3e 0a 3c 69 3e 2e 2e 2e 20 34 39 39 34 20 6c  r>.<i>... 4994 l
2b60: 69 6e 65 73 20 6f 6d 69 74 74 65 64 3c 2f 69 3e  ines omitted</i>
2b70: 3c 62 72 3e 0a 53 45 4c 45 43 54 20 63 6f 75 6e  <br>.SELECT coun
2b80: 74 28 2a 29 2c 20 61 76 67 28 62 29 20 46 52 4f  t(*), avg(b) FRO
2b90: 4d 20 74 32 20 57 48 45 52 45 20 62 3e 3d 34 39  M t2 WHERE b>=49
2ba0: 39 37 30 30 20 41 4e 44 20 62 3c 34 39 39 38 30  9700 AND b<49980
2bb0: 30 3b 3c 62 72 3e 0a 53 45 4c 45 43 54 20 63 6f  0;<br>.SELECT co
2bc0: 75 6e 74 28 2a 29 2c 20 61 76 67 28 62 29 20 46  unt(*), avg(b) F
2bd0: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3e 3d  ROM t2 WHERE b>=
2be0: 34 39 39 38 30 30 20 41 4e 44 20 62 3c 34 39 39  499800 AND b<499
2bf0: 39 30 30 3b 3c 62 72 3e 0a 53 45 4c 45 43 54 20  900;<br>.SELECT 
2c00: 63 6f 75 6e 74 28 2a 29 2c 20 61 76 67 28 62 29  count(*), avg(b)
2c10: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62   FROM t2 WHERE b
2c20: 3e 3d 34 39 39 39 30 30 20 41 4e 44 20 62 3c 35  >=499900 AND b<5
2c30: 30 30 30 30 30 3b 3c 62 72 3e 0a 0a 3c 2f 62 6c  00000;<br>..</bl
2c40: 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20  ockquote><table 
2c50: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
2c60: 64 69 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69  ding=0 cellspaci
2c70: 6e 67 3d 30 3e 0a 3c 74 72 3e 3c 74 64 3e 50 6f  ng=0>.<tr><td>Po
2c80: 73 74 67 72 65 53 51 4c 3a 3c 2f 74 64 3e 3c 74  stgreSQL:</td><t
2c90: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  d align="right">
2ca0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
2cb0: 70 3b 34 2e 36 31 34 3c 2f 74 64 3e 3c 2f 74 72  p;4.614</td></tr
2cc0: 3e 0a 3c 74 72 3e 3c 74 64 3e 4d 79 53 51 4c 3a  >.<tr><td>MySQL:
2cd0: 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22  </td><td align="
2ce0: 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62  right">&nbsp;&nb
2cf0: 73 70 3b 26 6e 62 73 70 3b 31 2e 32 37 30 3c 2f  sp;&nbsp;1.270</
2d00: 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64  td></tr>.<tr><td
2d10: 3e 53 51 4c 69 74 65 20 32 2e 37 2e 36 3a 3c 2f  >SQLite 2.7.6:</
2d20: 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  td><td align="ri
2d30: 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70  ght">&nbsp;&nbsp
2d40: 3b 26 6e 62 73 70 3b 31 2e 31 32 31 3c 2f 74 64  ;&nbsp;1.121</td
2d50: 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 53  ></tr>.<tr><td>S
2d60: 51 4c 69 74 65 20 32 2e 37 2e 36 20 28 6e 6f 73  QLite 2.7.6 (nos
2d70: 79 6e 63 29 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c  ync):</td><td al
2d80: 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73  ign="right">&nbs
2d90: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 31 2e  p;&nbsp;&nbsp;1.
2da0: 31 36 32 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f  162</td></tr>.</
2db0: 74 61 62 6c 65 3e 0a 0a 3c 70 3e 0a 41 6c 6c 20  table>..<p>.All 
2dc0: 74 68 72 65 65 20 64 61 74 61 62 61 73 65 20 65  three database e
2dd0: 6e 67 69 6e 65 73 20 72 75 6e 20 66 61 73 74 65  ngines run faste
2de0: 72 20 77 68 65 6e 20 74 68 65 79 20 68 61 76 65  r when they have
2df0: 20 69 6e 64 69 63 65 73 20 74 6f 20 77 6f 72 6b   indices to work
2e00: 20 77 69 74 68 2e 0a 42 75 74 20 53 51 4c 69 74   with..But SQLit
2e10: 65 20 69 73 20 73 74 69 6c 6c 20 74 68 65 20 66  e is still the f
2e20: 61 73 74 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 3c 68  astest..</p>..<h
2e30: 33 3e 54 65 73 74 20 38 3a 20 31 30 30 30 20 55  3>Test 8: 1000 U
2e40: 50 44 41 54 45 73 20 77 69 74 68 6f 75 74 20 61  PDATEs without a
2e50: 6e 20 69 6e 64 65 78 3c 2f 68 33 3e 0a 3c 62 6c  n index</h3>.<bl
2e60: 6f 63 6b 71 75 6f 74 65 3e 0a 42 45 47 49 4e 3b  ockquote>.BEGIN;
2e70: 3c 62 72 3e 0a 55 50 44 41 54 45 20 74 31 20 53  <br>.UPDATE t1 S
2e80: 45 54 20 62 3d 62 2a 32 20 57 48 45 52 45 20 61  ET b=b*2 WHERE a
2e90: 3e 3d 30 20 41 4e 44 20 61 3c 31 30 3b 3c 62 72  >=0 AND a<10;<br
2ea0: 3e 0a 55 50 44 41 54 45 20 74 31 20 53 45 54 20  >.UPDATE t1 SET 
2eb0: 62 3d 62 2a 32 20 57 48 45 52 45 20 61 3e 3d 31  b=b*2 WHERE a>=1
2ec0: 30 20 41 4e 44 20 61 3c 32 30 3b 3c 62 72 3e 0a  0 AND a<20;<br>.
2ed0: 3c 69 3e 2e 2e 2e 20 39 39 36 20 6c 69 6e 65 73  <i>... 996 lines
2ee0: 20 6f 6d 69 74 74 65 64 3c 2f 69 3e 3c 62 72 3e   omitted</i><br>
2ef0: 0a 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62  .UPDATE t1 SET b
2f00: 3d 62 2a 32 20 57 48 45 52 45 20 61 3e 3d 39 39  =b*2 WHERE a>=99
2f10: 38 30 20 41 4e 44 20 61 3c 39 39 39 30 3b 3c 62  80 AND a<9990;<b
2f20: 72 3e 0a 55 50 44 41 54 45 20 74 31 20 53 45 54  r>.UPDATE t1 SET
2f30: 20 62 3d 62 2a 32 20 57 48 45 52 45 20 61 3e 3d   b=b*2 WHERE a>=
2f40: 39 39 39 30 20 41 4e 44 20 61 3c 31 30 30 30 30  9990 AND a<10000
2f50: 3b 3c 62 72 3e 0a 43 4f 4d 4d 49 54 3b 3c 62 72  ;<br>.COMMIT;<br
2f60: 3e 0a 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  >..</blockquote>
2f70: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
2f80: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 30 20 63 65  cellpadding=0 ce
2f90: 6c 6c 73 70 61 63 69 6e 67 3d 30 3e 0a 3c 74 72  llspacing=0>.<tr
2fa0: 3e 3c 74 64 3e 50 6f 73 74 67 72 65 53 51 4c 3a  ><td>PostgreSQL:
2fb0: 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22  </td><td align="
2fc0: 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62  right">&nbsp;&nb
2fd0: 73 70 3b 26 6e 62 73 70 3b 31 2e 37 33 39 3c 2f  sp;&nbsp;1.739</
2fe0: 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64  td></tr>.<tr><td
2ff0: 3e 4d 79 53 51 4c 3a 3c 2f 74 64 3e 3c 74 64 20  >MySQL:</td><td 
3000: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e  align="right">&n
3010: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
3020: 38 2e 34 31 30 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  8.410</td></tr>.
3030: 3c 74 72 3e 3c 74 64 3e 53 51 4c 69 74 65 20 32  <tr><td>SQLite 2
3040: 2e 37 2e 36 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c  .7.6:</td><td al
3050: 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73  ign="right">&nbs
3060: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 30 2e  p;&nbsp;&nbsp;0.
3070: 36 33 37 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74  637</td></tr>.<t
3080: 72 3e 3c 74 64 3e 53 51 4c 69 74 65 20 32 2e 37  r><td>SQLite 2.7
3090: 2e 36 20 28 6e 6f 73 79 6e 63 29 3a 3c 2f 74 64  .6 (nosync):</td
30a0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  ><td align="righ
30b0: 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  t">&nbsp;&nbsp;&
30c0: 6e 62 73 70 3b 30 2e 36 33 38 3c 2f 74 64 3e 3c  nbsp;0.638</td><
30d0: 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  /tr>.</table>..<
30e0: 70 3e 0a 46 6f 72 20 74 68 69 73 20 70 61 72 74  p>.For this part
30f0: 69 63 75 6c 61 72 20 55 50 44 41 54 45 20 74 65  icular UPDATE te
3100: 73 74 2c 20 4d 79 53 51 4c 20 69 73 20 63 6f 6e  st, MySQL is con
3110: 73 69 73 74 65 6e 74 6c 79 0a 66 69 76 65 20 6f  sistently.five o
3120: 72 20 74 65 6e 20 74 69 6d 65 73 0a 73 6c 6f 77  r ten times.slow
3130: 65 72 20 74 68 61 6e 20 50 6f 73 74 67 72 65 53  er than PostgreS
3140: 51 4c 20 61 6e 64 20 53 51 4c 69 74 65 2e 20 20  QL and SQLite.  
3150: 49 20 64 6f 20 6e 6f 74 20 6b 6e 6f 77 20 77 68  I do not know wh
3160: 79 2e 20 20 4d 79 53 51 4c 20 69 73 0a 6e 6f 72  y.  MySQL is.nor
3170: 6d 61 6c 6c 79 20 61 20 76 65 72 79 20 66 61 73  mally a very fas
3180: 74 20 65 6e 67 69 6e 65 2e 20 20 50 65 72 68 61  t engine.  Perha
3190: 70 73 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 20  ps this problem 
31a0: 68 61 73 20 62 65 65 6e 20 61 64 64 72 65 73 73  has been address
31b0: 65 64 0a 69 6e 20 6c 61 74 65 72 20 76 65 72 73  ed.in later vers
31c0: 69 6f 6e 73 20 6f 66 20 4d 79 53 51 4c 2e 0a 3c  ions of MySQL..<
31d0: 2f 70 3e 0a 0a 3c 68 33 3e 54 65 73 74 20 39 3a  /p>..<h3>Test 9:
31e0: 20 32 35 30 30 30 20 55 50 44 41 54 45 73 20 77   25000 UPDATEs w
31f0: 69 74 68 20 61 6e 20 69 6e 64 65 78 3c 2f 68 33  ith an index</h3
3200: 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 42  >.<blockquote>.B
3210: 45 47 49 4e 3b 3c 62 72 3e 0a 55 50 44 41 54 45  EGIN;<br>.UPDATE
3220: 20 74 32 20 53 45 54 20 62 3d 34 36 38 30 32 36   t2 SET b=468026
3230: 20 57 48 45 52 45 20 61 3d 31 3b 3c 62 72 3e 0a   WHERE a=1;<br>.
3240: 55 50 44 41 54 45 20 74 32 20 53 45 54 20 62 3d  UPDATE t2 SET b=
3250: 31 32 31 39 32 38 20 57 48 45 52 45 20 61 3d 32  121928 WHERE a=2
3260: 3b 3c 62 72 3e 0a 3c 69 3e 2e 2e 2e 20 32 34 39  ;<br>.<i>... 249
3270: 39 36 20 6c 69 6e 65 73 20 6f 6d 69 74 74 65 64  96 lines omitted
3280: 3c 2f 69 3e 3c 62 72 3e 0a 55 50 44 41 54 45 20  </i><br>.UPDATE 
3290: 74 32 20 53 45 54 20 62 3d 33 35 30 36 35 20 57  t2 SET b=35065 W
32a0: 48 45 52 45 20 61 3d 32 34 39 39 39 3b 3c 62 72  HERE a=24999;<br
32b0: 3e 0a 55 50 44 41 54 45 20 74 32 20 53 45 54 20  >.UPDATE t2 SET 
32c0: 62 3d 33 34 37 33 39 33 20 57 48 45 52 45 20 61  b=347393 WHERE a
32d0: 3d 32 35 30 30 30 3b 3c 62 72 3e 0a 43 4f 4d 4d  =25000;<br>.COMM
32e0: 49 54 3b 3c 62 72 3e 0a 0a 3c 2f 62 6c 6f 63 6b  IT;<br>..</block
32f0: 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72  quote><table bor
3300: 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e  der=0 cellpaddin
3310: 67 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  g=0 cellspacing=
3320: 30 3e 0a 3c 74 72 3e 3c 74 64 3e 50 6f 73 74 67  0>.<tr><td>Postg
3330: 72 65 53 51 4c 3a 3c 2f 74 64 3e 3c 74 64 20 61  reSQL:</td><td a
3340: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62  lign="right">&nb
3350: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 31  sp;&nbsp;&nbsp;1
3360: 38 2e 37 39 37 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  8.797</td></tr>.
3370: 3c 74 72 3e 3c 74 64 3e 4d 79 53 51 4c 3a 3c 2f  <tr><td>MySQL:</
3380: 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  td><td align="ri
3390: 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70  ght">&nbsp;&nbsp
33a0: 3b 26 6e 62 73 70 3b 38 2e 31 33 34 3c 2f 74 64  ;&nbsp;8.134</td
33b0: 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 53  ></tr>.<tr><td>S
33c0: 51 4c 69 74 65 20 32 2e 37 2e 36 3a 3c 2f 74 64  QLite 2.7.6:</td
33d0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  ><td align="righ
33e0: 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  t">&nbsp;&nbsp;&
33f0: 6e 62 73 70 3b 33 2e 35 32 30 3c 2f 74 64 3e 3c  nbsp;3.520</td><
3400: 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 53 51 4c  /tr>.<tr><td>SQL
3410: 69 74 65 20 32 2e 37 2e 36 20 28 6e 6f 73 79 6e  ite 2.7.6 (nosyn
3420: 63 29 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67  c):</td><td alig
3430: 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73 70 3b  n="right">&nbsp;
3440: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 33 2e 31 30  &nbsp;&nbsp;3.10
3450: 34 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61  4</td></tr>.</ta
3460: 62 6c 65 3e 0a 0a 3c 70 3e 0a 41 73 20 72 65 63  ble>..<p>.As rec
3470: 65 6e 74 6c 79 20 61 73 20 76 65 72 73 69 6f 6e  ently as version
3480: 20 32 2e 37 2e 30 2c 20 53 51 4c 69 74 65 20 72   2.7.0, SQLite r
3490: 61 6e 20 61 74 20 61 62 6f 75 74 20 74 68 65 20  an at about the 
34a0: 73 61 6d 65 20 73 70 65 65 64 20 61 73 0a 4d 79  same speed as.My
34b0: 53 51 4c 20 6f 6e 20 74 68 69 73 20 74 65 73 74  SQL on this test
34c0: 2e 20 20 42 75 74 20 72 65 63 65 6e 74 20 6f 70  .  But recent op
34d0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 74 6f 20 53  timizations to S
34e0: 51 4c 69 74 65 20 68 61 76 65 20 6d 6f 72 65 0a  QLite have more.
34f0: 74 68 61 6e 20 64 6f 75 62 6c 65 64 20 73 70 65  than doubled spe
3500: 65 64 20 6f 66 20 55 50 44 41 54 45 73 2e 0a 3c  ed of UPDATEs..<
3510: 2f 70 3e 0a 0a 3c 68 33 3e 54 65 73 74 20 31 30  /p>..<h3>Test 10
3520: 3a 20 32 35 30 30 30 20 74 65 78 74 20 55 50 44  : 25000 text UPD
3530: 41 54 45 73 20 77 69 74 68 20 61 6e 20 69 6e 64  ATEs with an ind
3540: 65 78 3c 2f 68 33 3e 0a 3c 62 6c 6f 63 6b 71 75  ex</h3>.<blockqu
3550: 6f 74 65 3e 0a 42 45 47 49 4e 3b 3c 62 72 3e 0a  ote>.BEGIN;<br>.
3560: 55 50 44 41 54 45 20 74 32 20 53 45 54 20 63 3d  UPDATE t2 SET c=
3570: 27 6f 6e 65 20 68 75 6e 64 72 65 64 20 66 6f 72  'one hundred for
3580: 74 79 20 65 69 67 68 74 20 74 68 6f 75 73 61 6e  ty eight thousan
3590: 64 20 74 68 72 65 65 20 68 75 6e 64 72 65 64 20  d three hundred 
35a0: 65 69 67 68 74 79 20 74 77 6f 27 20 57 48 45 52  eighty two' WHER
35b0: 45 20 61 3d 31 3b 3c 62 72 3e 0a 55 50 44 41 54  E a=1;<br>.UPDAT
35c0: 45 20 74 32 20 53 45 54 20 63 3d 27 74 68 72 65  E t2 SET c='thre
35d0: 65 20 68 75 6e 64 72 65 64 20 73 69 78 74 79 20  e hundred sixty 
35e0: 73 69 78 20 74 68 6f 75 73 61 6e 64 20 66 69 76  six thousand fiv
35f0: 65 20 68 75 6e 64 72 65 64 20 74 77 6f 27 20 57  e hundred two' W
3600: 48 45 52 45 20 61 3d 32 3b 3c 62 72 3e 0a 3c 69  HERE a=2;<br>.<i
3610: 3e 2e 2e 2e 20 32 34 39 39 36 20 6c 69 6e 65 73  >... 24996 lines
3620: 20 6f 6d 69 74 74 65 64 3c 2f 69 3e 3c 62 72 3e   omitted</i><br>
3630: 0a 55 50 44 41 54 45 20 74 32 20 53 45 54 20 63  .UPDATE t2 SET c
3640: 3d 27 74 68 72 65 65 20 68 75 6e 64 72 65 64 20  ='three hundred 
3650: 65 69 67 68 74 79 20 74 68 72 65 65 20 74 68 6f  eighty three tho
3660: 75 73 61 6e 64 20 6e 69 6e 65 74 79 20 6e 69 6e  usand ninety nin
3670: 65 27 20 57 48 45 52 45 20 61 3d 32 34 39 39 39  e' WHERE a=24999
3680: 3b 3c 62 72 3e 0a 55 50 44 41 54 45 20 74 32 20  ;<br>.UPDATE t2 
3690: 53 45 54 20 63 3d 27 74 77 6f 20 68 75 6e 64 72  SET c='two hundr
36a0: 65 64 20 66 69 66 74 79 20 73 69 78 20 74 68 6f  ed fifty six tho
36b0: 75 73 61 6e 64 20 65 69 67 68 74 20 68 75 6e 64  usand eight hund
36c0: 72 65 64 20 74 68 69 72 74 79 27 20 57 48 45 52  red thirty' WHER
36d0: 45 20 61 3d 32 35 30 30 30 3b 3c 62 72 3e 0a 43  E a=25000;<br>.C
36e0: 4f 4d 4d 49 54 3b 3c 62 72 3e 0a 0a 3c 2f 62 6c  OMMIT;<br>..</bl
36f0: 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20  ockquote><table 
3700: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
3710: 64 69 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69  ding=0 cellspaci
3720: 6e 67 3d 30 3e 0a 3c 74 72 3e 3c 74 64 3e 50 6f  ng=0>.<tr><td>Po
3730: 73 74 67 72 65 53 51 4c 3a 3c 2f 74 64 3e 3c 74  stgreSQL:</td><t
3740: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  d align="right">
3750: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
3760: 70 3b 34 38 2e 31 33 33 3c 2f 74 64 3e 3c 2f 74  p;48.133</td></t
3770: 72 3e 0a 3c 74 72 3e 3c 74 64 3e 4d 79 53 51 4c  r>.<tr><td>MySQL
3780: 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d  :</td><td align=
3790: 22 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e  "right">&nbsp;&n
37a0: 62 73 70 3b 26 6e 62 73 70 3b 36 2e 39 38 32 3c  bsp;&nbsp;6.982<
37b0: 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74  /td></tr>.<tr><t
37c0: 64 3e 53 51 4c 69 74 65 20 32 2e 37 2e 36 3a 3c  d>SQLite 2.7.6:<
37d0: 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72  /td><td align="r
37e0: 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73  ight">&nbsp;&nbs
37f0: 70 3b 26 6e 62 73 70 3b 32 2e 34 30 38 3c 2f 74  p;&nbsp;2.408</t
3800: 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e  d></tr>.<tr><td>
3810: 53 51 4c 69 74 65 20 32 2e 37 2e 36 20 28 6e 6f  SQLite 2.7.6 (no
3820: 73 79 6e 63 29 3a 3c 2f 74 64 3e 3c 74 64 20 61  sync):</td><td a
3830: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62  lign="right">&nb
3840: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 31  sp;&nbsp;&nbsp;1
3850: 2e 37 32 35 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  .725</td></tr>.<
3860: 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 0a 48 65 72  /table>..<p>.Her
3870: 65 20 61 67 61 69 6e 2c 20 76 65 72 73 69 6f 6e  e again, version
3880: 20 32 2e 37 2e 30 20 6f 66 20 53 51 4c 69 74 65   2.7.0 of SQLite
3890: 20 75 73 65 64 20 74 6f 20 72 75 6e 20 61 74 20   used to run at 
38a0: 61 62 6f 75 74 20 74 68 65 20 73 61 6d 65 20 73  about the same s
38b0: 70 65 65 64 0a 61 73 20 4d 79 53 51 4c 2e 20 20  peed.as MySQL.  
38c0: 42 75 74 20 6e 6f 77 20 76 65 72 73 69 6f 6e 20  But now version 
38d0: 32 2e 37 2e 36 20 69 73 20 6f 76 65 72 20 74 77  2.7.6 is over tw
38e0: 6f 20 74 69 6d 65 73 20 66 61 73 74 65 72 20 74  o times faster t
38f0: 68 61 6e 20 4d 79 53 51 4c 20 61 6e 64 0a 6f 76  han MySQL and.ov
3900: 65 72 20 74 77 65 6e 74 79 20 74 69 6d 65 73 20  er twenty times 
3910: 66 61 73 74 65 72 20 74 68 61 6e 20 50 6f 73 74  faster than Post
3920: 67 72 65 53 51 4c 2e 0a 3c 2f 70 3e 0a 0a 3c 70  greSQL..</p>..<p
3930: 3e 0a 49 6e 20 66 61 69 72 6e 65 73 73 20 74 6f  >.In fairness to
3940: 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 69 74 20   PostgreSQL, it 
3950: 73 74 61 72 74 65 64 20 74 68 72 61 73 68 69 6e  started thrashin
3960: 67 20 6f 6e 20 74 68 69 73 20 74 65 73 74 2e 20  g on this test. 
3970: 20 41 0a 6b 6e 6f 77 6c 65 64 67 65 61 62 6c 65   A.knowledgeable
3980: 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 6d   administrator m
3990: 69 67 68 74 20 62 65 20 61 62 6c 65 20 74 6f 20  ight be able to 
39a0: 67 65 74 20 50 6f 73 74 67 72 65 53 51 4c 20 74  get PostgreSQL t
39b0: 6f 20 72 75 6e 20 61 20 6c 6f 74 0a 66 61 73 74  o run a lot.fast
39c0: 65 72 20 68 65 72 65 20 62 79 20 74 77 65 61 6b  er here by tweak
39d0: 69 6e 67 20 61 6e 64 20 74 75 6e 69 6e 67 20 74  ing and tuning t
39e0: 68 65 20 73 65 72 76 65 72 20 61 20 6c 69 74 74  he server a litt
39f0: 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 65  le..</p>..<h3>Te
3a00: 73 74 20 31 31 3a 20 49 4e 53 45 52 54 73 20 66  st 11: INSERTs f
3a10: 72 6f 6d 20 61 20 53 45 4c 45 43 54 3c 2f 68 33  rom a SELECT</h3
3a20: 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 42  >.<blockquote>.B
3a30: 45 47 49 4e 3b 3c 62 72 3e 49 4e 53 45 52 54 20  EGIN;<br>INSERT 
3a40: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 62  INTO t1 SELECT b
3a50: 2c 61 2c 63 20 46 52 4f 4d 20 74 32 3b 3c 62 72  ,a,c FROM t2;<br
3a60: 3e 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  >INSERT INTO t2 
3a70: 53 45 4c 45 43 54 20 62 2c 61 2c 63 20 46 52 4f  SELECT b,a,c FRO
3a80: 4d 20 74 31 3b 3c 62 72 3e 43 4f 4d 4d 49 54 3b  M t1;<br>COMMIT;
3a90: 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74  .</blockquote><t
3aa0: 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
3ab0: 6c 6c 70 61 64 64 69 6e 67 3d 30 20 63 65 6c 6c  llpadding=0 cell
3ac0: 73 70 61 63 69 6e 67 3d 30 3e 0a 3c 74 72 3e 3c  spacing=0>.<tr><
3ad0: 74 64 3e 50 6f 73 74 67 72 65 53 51 4c 3a 3c 2f  td>PostgreSQL:</
3ae0: 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  td><td align="ri
3af0: 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70  ght">&nbsp;&nbsp
3b00: 3b 26 6e 62 73 70 3b 36 31 2e 33 36 34 3c 2f 74  ;&nbsp;61.364</t
3b10: 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e  d></tr>.<tr><td>
3b20: 4d 79 53 51 4c 3a 3c 2f 74 64 3e 3c 74 64 20 61  MySQL:</td><td a
3b30: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62  lign="right">&nb
3b40: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 31  sp;&nbsp;&nbsp;1
3b50: 2e 35 33 37 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  .537</td></tr>.<
3b60: 74 72 3e 3c 74 64 3e 53 51 4c 69 74 65 20 32 2e  tr><td>SQLite 2.
3b70: 37 2e 36 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69  7.6:</td><td ali
3b80: 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73 70  gn="right">&nbsp
3b90: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 32 2e 37  ;&nbsp;&nbsp;2.7
3ba0: 38 37 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72  87</td></tr>.<tr
3bb0: 3e 3c 74 64 3e 53 51 4c 69 74 65 20 32 2e 37 2e  ><td>SQLite 2.7.
3bc0: 36 20 28 6e 6f 73 79 6e 63 29 3a 3c 2f 74 64 3e  6 (nosync):</td>
3bd0: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
3be0: 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  ">&nbsp;&nbsp;&n
3bf0: 62 73 70 3b 31 2e 35 39 39 3c 2f 74 64 3e 3c 2f  bsp;1.599</td></
3c00: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70  tr>.</table>..<p
3c10: 3e 0a 54 68 65 20 61 73 79 6e 63 68 72 6f 6e 6f  >.The asynchrono
3c20: 75 73 20 53 51 4c 69 74 65 20 69 73 20 6a 75 73  us SQLite is jus
3c30: 74 20 61 20 73 68 61 64 65 20 73 6c 6f 77 65 72  t a shade slower
3c40: 20 74 68 61 6e 20 4d 79 53 51 4c 20 6f 6e 20 74   than MySQL on t
3c50: 68 69 73 20 74 65 73 74 2e 0a 28 4d 79 53 51 4c  his test..(MySQL
3c60: 20 73 65 65 6d 73 20 74 6f 20 62 65 20 65 73 70   seems to be esp
3c70: 65 63 69 61 6c 6c 79 20 61 64 65 70 74 20 61 74  ecially adept at
3c80: 20 49 4e 53 45 52 54 2e 2e 2e 53 45 4c 45 43 54   INSERT...SELECT
3c90: 20 73 74 61 74 65 6d 65 6e 74 73 2e 29 0a 54 68   statements.).Th
3ca0: 65 20 50 6f 73 74 67 72 65 53 51 4c 20 65 6e 67  e PostgreSQL eng
3cb0: 69 6e 65 20 69 73 20 73 74 69 6c 6c 20 74 68 72  ine is still thr
3cc0: 61 73 68 69 6e 67 20 2d 20 6d 6f 73 74 20 6f 66  ashing - most of
3cd0: 20 74 68 65 20 36 31 20 73 65 63 6f 6e 64 73 20   the 61 seconds 
3ce0: 69 74 20 75 73 65 64 0a 77 65 72 65 20 73 70 65  it used.were spe
3cf0: 6e 74 20 77 61 69 74 69 6e 67 20 6f 6e 20 64 69  nt waiting on di
3d00: 73 6b 20 49 2f 4f 2e 0a 3c 2f 70 3e 0a 0a 3c 68  sk I/O..</p>..<h
3d10: 33 3e 54 65 73 74 20 31 32 3a 20 44 45 4c 45 54  3>Test 12: DELET
3d20: 45 20 77 69 74 68 6f 75 74 20 61 6e 20 69 6e 64  E without an ind
3d30: 65 78 3c 2f 68 33 3e 0a 3c 62 6c 6f 63 6b 71 75  ex</h3>.<blockqu
3d40: 6f 74 65 3e 0a 44 45 4c 45 54 45 20 46 52 4f 4d  ote>.DELETE FROM
3d50: 20 74 32 20 57 48 45 52 45 20 63 20 4c 49 4b 45   t2 WHERE c LIKE
3d60: 20 27 25 66 69 66 74 79 25 27 3b 0a 3c 2f 62 6c   '%fifty%';.</bl
3d70: 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20  ockquote><table 
3d80: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
3d90: 64 69 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69  ding=0 cellspaci
3da0: 6e 67 3d 30 3e 0a 3c 74 72 3e 3c 74 64 3e 50 6f  ng=0>.<tr><td>Po
3db0: 73 74 67 72 65 53 51 4c 3a 3c 2f 74 64 3e 3c 74  stgreSQL:</td><t
3dc0: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  d align="right">
3dd0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
3de0: 70 3b 31 2e 35 30 39 3c 2f 74 64 3e 3c 2f 74 72  p;1.509</td></tr
3df0: 3e 0a 3c 74 72 3e 3c 74 64 3e 4d 79 53 51 4c 3a  >.<tr><td>MySQL:
3e00: 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22  </td><td align="
3e10: 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62  right">&nbsp;&nb
3e20: 73 70 3b 26 6e 62 73 70 3b 30 2e 39 37 35 3c 2f  sp;&nbsp;0.975</
3e30: 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64  td></tr>.<tr><td
3e40: 3e 53 51 4c 69 74 65 20 32 2e 37 2e 36 3a 3c 2f  >SQLite 2.7.6:</
3e50: 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  td><td align="ri
3e60: 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70  ght">&nbsp;&nbsp
3e70: 3b 26 6e 62 73 70 3b 34 2e 30 30 34 3c 2f 74 64  ;&nbsp;4.004</td
3e80: 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 53  ></tr>.<tr><td>S
3e90: 51 4c 69 74 65 20 32 2e 37 2e 36 20 28 6e 6f 73  QLite 2.7.6 (nos
3ea0: 79 6e 63 29 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c  ync):</td><td al
3eb0: 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73  ign="right">&nbs
3ec0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 30 2e  p;&nbsp;&nbsp;0.
3ed0: 35 36 30 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f  560</td></tr>.</
3ee0: 74 61 62 6c 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20  table>..<p>.The 
3ef0: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 76 65 72 73  synchronous vers
3f00: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 69 73  ion of SQLite is
3f10: 20 74 68 65 20 73 6c 6f 77 65 73 74 20 6f 66 20   the slowest of 
3f20: 74 68 65 20 67 72 6f 75 70 20 69 6e 20 74 68 69  the group in thi
3f30: 73 20 74 65 73 74 2c 0a 62 75 74 20 74 68 65 20  s test,.but the 
3f40: 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 76 65 72  asynchronous ver
3f50: 73 69 6f 6e 20 69 73 20 74 68 65 20 66 61 73 74  sion is the fast
3f60: 65 73 74 2e 20 20 0a 54 68 65 20 64 69 66 66 65  est.  .The diffe
3f70: 72 65 6e 63 65 20 69 73 20 74 68 65 20 65 78 74  rence is the ext
3f80: 72 61 20 74 69 6d 65 20 6e 65 65 64 65 64 20 74  ra time needed t
3f90: 6f 20 65 78 65 63 75 74 65 20 66 73 79 6e 63 28  o execute fsync(
3fa0: 29 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 65 73  )..</p>..<h3>Tes
3fb0: 74 20 31 33 3a 20 44 45 4c 45 54 45 20 77 69 74  t 13: DELETE wit
3fc0: 68 20 61 6e 20 69 6e 64 65 78 3c 2f 68 33 3e 0a  h an index</h3>.
3fd0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 44 45 4c  <blockquote>.DEL
3fe0: 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45 52  ETE FROM t2 WHER
3ff0: 45 20 61 3e 31 30 20 41 4e 44 20 61 3c 32 30 30  E a>10 AND a<200
4000: 30 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  00;.</blockquote
4010: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30  ><table border=0
4020: 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 30 20 63   cellpadding=0 c
4030: 65 6c 6c 73 70 61 63 69 6e 67 3d 30 3e 0a 3c 74  ellspacing=0>.<t
4040: 72 3e 3c 74 64 3e 50 6f 73 74 67 72 65 53 51 4c  r><td>PostgreSQL
4050: 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d  :</td><td align=
4060: 22 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e  "right">&nbsp;&n
4070: 62 73 70 3b 26 6e 62 73 70 3b 31 2e 33 31 36 3c  bsp;&nbsp;1.316<
4080: 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74  /td></tr>.<tr><t
4090: 64 3e 4d 79 53 51 4c 3a 3c 2f 74 64 3e 3c 74 64  d>MySQL:</td><td
40a0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26   align="right">&
40b0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
40c0: 3b 32 2e 32 36 32 3c 2f 74 64 3e 3c 2f 74 72 3e  ;2.262</td></tr>
40d0: 0a 3c 74 72 3e 3c 74 64 3e 53 51 4c 69 74 65 20  .<tr><td>SQLite 
40e0: 32 2e 37 2e 36 3a 3c 2f 74 64 3e 3c 74 64 20 61  2.7.6:</td><td a
40f0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62  lign="right">&nb
4100: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 32  sp;&nbsp;&nbsp;2
4110: 2e 30 36 38 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  .068</td></tr>.<
4120: 74 72 3e 3c 74 64 3e 53 51 4c 69 74 65 20 32 2e  tr><td>SQLite 2.
4130: 37 2e 36 20 28 6e 6f 73 79 6e 63 29 3a 3c 2f 74  7.6 (nosync):</t
4140: 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  d><td align="rig
4150: 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b  ht">&nbsp;&nbsp;
4160: 26 6e 62 73 70 3b 30 2e 37 35 32 3c 2f 74 64 3e  &nbsp;0.752</td>
4170: 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  </tr>.</table>..
4180: 3c 70 3e 0a 54 68 69 73 20 74 65 73 74 20 69 73  <p>.This test is
4190: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 65 63   significant bec
41a0: 61 75 73 65 20 69 74 20 69 73 20 6f 6e 65 20 6f  ause it is one o
41b0: 66 20 74 68 65 20 66 65 77 20 77 68 65 72 65 0a  f the few where.
41c0: 50 6f 73 74 67 72 65 53 51 4c 20 69 73 20 66 61  PostgreSQL is fa
41d0: 73 74 65 72 20 74 68 61 6e 20 4d 79 53 51 4c 2e  ster than MySQL.
41e0: 20 20 54 68 65 20 61 73 79 6e 63 68 72 6f 6e 6f    The asynchrono
41f0: 75 73 20 53 51 4c 69 74 65 20 69 73 2c 0a 68 6f  us SQLite is,.ho
4200: 77 65 76 65 72 2c 20 66 61 73 74 65 72 20 74 68  wever, faster th
4210: 65 6e 20 62 6f 74 68 20 74 68 65 20 6f 74 68 65  en both the othe
4220: 72 20 74 77 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  r two..</p>..<h3
4230: 3e 54 65 73 74 20 31 34 3a 20 41 20 62 69 67 20  >Test 14: A big 
4240: 49 4e 53 45 52 54 20 61 66 74 65 72 20 61 20 62  INSERT after a b
4250: 69 67 20 44 45 4c 45 54 45 3c 2f 68 33 3e 0a 3c  ig DELETE</h3>.<
4260: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 49 4e 53 45  blockquote>.INSE
4270: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
4280: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 3c 2f 62  T * FROM t1;.</b
4290: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65  lockquote><table
42a0: 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
42b0: 64 64 69 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63  dding=0 cellspac
42c0: 69 6e 67 3d 30 3e 0a 3c 74 72 3e 3c 74 64 3e 50  ing=0>.<tr><td>P
42d0: 6f 73 74 67 72 65 53 51 4c 3a 3c 2f 74 64 3e 3c  ostgreSQL:</td><
42e0: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
42f0: 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  >&nbsp;&nbsp;&nb
4300: 73 70 3b 31 33 2e 31 36 38 3c 2f 74 64 3e 3c 2f  sp;13.168</td></
4310: 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 4d 79 53 51  tr>.<tr><td>MySQ
4320: 4c 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e  L:</td><td align
4330: 3d 22 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26  ="right">&nbsp;&
4340: 6e 62 73 70 3b 26 6e 62 73 70 3b 31 2e 38 31 35  nbsp;&nbsp;1.815
4350: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c  </td></tr>.<tr><
4360: 74 64 3e 53 51 4c 69 74 65 20 32 2e 37 2e 36 3a  td>SQLite 2.7.6:
4370: 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22  </td><td align="
4380: 72 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62  right">&nbsp;&nb
4390: 73 70 3b 26 6e 62 73 70 3b 33 2e 32 31 30 3c 2f  sp;&nbsp;3.210</
43a0: 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64  td></tr>.<tr><td
43b0: 3e 53 51 4c 69 74 65 20 32 2e 37 2e 36 20 28 6e  >SQLite 2.7.6 (n
43c0: 6f 73 79 6e 63 29 3a 3c 2f 74 64 3e 3c 74 64 20  osync):</td><td 
43d0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e  align="right">&n
43e0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
43f0: 31 2e 34 38 35 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  1.485</td></tr>.
4400: 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 0a 53 6f  </table>..<p>.So
4410: 6d 65 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e  me older version
4420: 73 20 6f 66 20 53 51 4c 69 74 65 20 28 70 72 69  s of SQLite (pri
4430: 6f 72 20 74 6f 20 76 65 72 73 69 6f 6e 20 32 2e  or to version 2.
4440: 34 2e 30 29 0a 77 6f 75 6c 64 20 73 68 6f 77 20  4.0).would show 
4450: 64 65 63 72 65 61 73 69 6e 67 20 70 65 72 66 6f  decreasing perfo
4460: 72 6d 61 6e 63 65 20 61 66 74 65 72 20 61 0a 73  rmance after a.s
4470: 65 71 75 65 6e 63 65 20 6f 66 20 44 45 4c 45 54  equence of DELET
4480: 45 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e  Es followed by n
4490: 65 77 20 49 4e 53 45 52 54 73 2e 20 20 41 73 20  ew INSERTs.  As 
44a0: 74 68 69 73 20 74 65 73 74 20 73 68 6f 77 73 2c  this test shows,
44b0: 20 74 68 65 0a 70 72 6f 62 6c 65 6d 20 68 61 73   the.problem has
44c0: 20 6e 6f 77 20 62 65 65 6e 20 72 65 73 6f 6c 76   now been resolv
44d0: 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 65  ed..</p>..<h3>Te
44e0: 73 74 20 31 35 3a 20 41 20 62 69 67 20 44 45 4c  st 15: A big DEL
44f0: 45 54 45 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ETE followed by 
4500: 6d 61 6e 79 20 73 6d 61 6c 6c 20 49 4e 53 45 52  many small INSER
4510: 54 73 3c 2f 68 33 3e 0a 3c 62 6c 6f 63 6b 71 75  Ts</h3>.<blockqu
4520: 6f 74 65 3e 0a 42 45 47 49 4e 3b 3c 62 72 3e 0a  ote>.BEGIN;<br>.
4530: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 3c  DELETE FROM t1;<
4540: 62 72 3e 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20  br>.INSERT INTO 
4550: 74 31 20 56 41 4c 55 45 53 28 31 2c 31 30 37 31  t1 VALUES(1,1071
4560: 39 2c 27 74 65 6e 20 74 68 6f 75 73 61 6e 64 20  9,'ten thousand 
4570: 73 65 76 65 6e 20 68 75 6e 64 72 65 64 20 6e 69  seven hundred ni
4580: 6e 65 74 65 65 6e 27 29 3b 3c 62 72 3e 0a 3c 69  neteen');<br>.<i
4590: 3e 2e 2e 2e 20 31 31 39 39 37 20 6c 69 6e 65 73  >... 11997 lines
45a0: 20 6f 6d 69 74 74 65 64 3c 2f 69 3e 3c 62 72 3e   omitted</i><br>
45b0: 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  .INSERT INTO t1 
45c0: 56 41 4c 55 45 53 28 31 31 39 39 39 2c 37 32 38  VALUES(11999,728
45d0: 33 36 2c 27 73 65 76 65 6e 74 79 20 74 77 6f 20  36,'seventy two 
45e0: 74 68 6f 75 73 61 6e 64 20 65 69 67 68 74 20 68  thousand eight h
45f0: 75 6e 64 72 65 64 20 74 68 69 72 74 79 20 73 69  undred thirty si
4600: 78 27 29 3b 3c 62 72 3e 0a 49 4e 53 45 52 54 20  x');<br>.INSERT 
4610: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
4620: 32 30 30 30 2c 36 34 32 33 31 2c 27 73 69 78 74  2000,64231,'sixt
4630: 79 20 66 6f 75 72 20 74 68 6f 75 73 61 6e 64 20  y four thousand 
4640: 74 77 6f 20 68 75 6e 64 72 65 64 20 74 68 69 72  two hundred thir
4650: 74 79 20 6f 6e 65 27 29 3b 3c 62 72 3e 0a 43 4f  ty one');<br>.CO
4660: 4d 4d 49 54 3b 3c 62 72 3e 0a 0a 3c 2f 62 6c 6f  MMIT;<br>..</blo
4670: 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62  ckquote><table b
4680: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64  order=0 cellpadd
4690: 69 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e  ing=0 cellspacin
46a0: 67 3d 30 3e 0a 3c 74 72 3e 3c 74 64 3e 50 6f 73  g=0>.<tr><td>Pos
46b0: 74 67 72 65 53 51 4c 3a 3c 2f 74 64 3e 3c 74 64  tgreSQL:</td><td
46c0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 26   align="right">&
46d0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
46e0: 3b 34 2e 35 35 36 3c 2f 74 64 3e 3c 2f 74 72 3e  ;4.556</td></tr>
46f0: 0a 3c 74 72 3e 3c 74 64 3e 4d 79 53 51 4c 3a 3c  .<tr><td>MySQL:<
4700: 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72  /td><td align="r
4710: 69 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73  ight">&nbsp;&nbs
4720: 70 3b 26 6e 62 73 70 3b 31 2e 37 30 34 3c 2f 74  p;&nbsp;1.704</t
4730: 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e  d></tr>.<tr><td>
4740: 53 51 4c 69 74 65 20 32 2e 37 2e 36 3a 3c 2f 74  SQLite 2.7.6:</t
4750: 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  d><td align="rig
4760: 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b  ht">&nbsp;&nbsp;
4770: 26 6e 62 73 70 3b 30 2e 36 31 38 3c 2f 74 64 3e  &nbsp;0.618</td>
4780: 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 53 51  </tr>.<tr><td>SQ
4790: 4c 69 74 65 20 32 2e 37 2e 36 20 28 6e 6f 73 79  Lite 2.7.6 (nosy
47a0: 6e 63 29 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69  nc):</td><td ali
47b0: 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73 70  gn="right">&nbsp
47c0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 30 2e 34  ;&nbsp;&nbsp;0.4
47d0: 30 36 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74  06</td></tr>.</t
47e0: 61 62 6c 65 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  able>..<p>.SQLit
47f0: 65 20 69 73 20 76 65 72 79 20 67 6f 6f 64 20 61  e is very good a
4800: 74 20 64 6f 69 6e 67 20 49 4e 53 45 52 54 73 20  t doing INSERTs 
4810: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
4820: 74 69 6f 6e 2c 20 77 68 69 63 68 20 70 72 6f 62  tion, which prob
4830: 61 62 6c 79 0a 65 78 70 6c 61 69 6e 73 20 77 68  ably.explains wh
4840: 79 20 69 74 20 69 73 20 73 6f 20 6d 75 63 68 20  y it is so much 
4850: 66 61 73 74 65 72 20 74 68 61 6e 20 74 68 65 20  faster than the 
4860: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20  other databases 
4870: 61 74 20 74 68 69 73 20 74 65 73 74 2e 0a 3c 2f  at this test..</
4880: 70 3e 0a 0a 3c 68 33 3e 54 65 73 74 20 31 36 3a  p>..<h3>Test 16:
4890: 20 44 52 4f 50 20 54 41 42 4c 45 3c 2f 68 33 3e   DROP TABLE</h3>
48a0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 44 52  .<blockquote>.DR
48b0: 4f 50 20 54 41 42 4c 45 20 74 31 3b 3c 62 72 3e  OP TABLE t1;<br>
48c0: 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 3c 62  DROP TABLE t2;<b
48d0: 72 3e 44 52 4f 50 20 54 41 42 4c 45 20 74 33 3b  r>DROP TABLE t3;
48e0: 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74  .</blockquote><t
48f0: 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
4900: 6c 6c 70 61 64 64 69 6e 67 3d 30 20 63 65 6c 6c  llpadding=0 cell
4910: 73 70 61 63 69 6e 67 3d 30 3e 0a 3c 74 72 3e 3c  spacing=0>.<tr><
4920: 74 64 3e 50 6f 73 74 67 72 65 53 51 4c 3a 3c 2f  td>PostgreSQL:</
4930: 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  td><td align="ri
4940: 67 68 74 22 3e 26 6e 62 73 70 3b 26 6e 62 73 70  ght">&nbsp;&nbsp
4950: 3b 26 6e 62 73 70 3b 30 2e 31 33 35 3c 2f 74 64  ;&nbsp;0.135</td
4960: 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 4d  ></tr>.<tr><td>M
4970: 79 53 51 4c 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c  ySQL:</td><td al
4980: 69 67 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73  ign="right">&nbs
4990: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 30 2e  p;&nbsp;&nbsp;0.
49a0: 30 31 35 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74  015</td></tr>.<t
49b0: 72 3e 3c 74 64 3e 53 51 4c 69 74 65 20 32 2e 37  r><td>SQLite 2.7
49c0: 2e 36 3a 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67  .6:</td><td alig
49d0: 6e 3d 22 72 69 67 68 74 22 3e 26 6e 62 73 70 3b  n="right">&nbsp;
49e0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 30 2e 39 33  &nbsp;&nbsp;0.93
49f0: 39 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e  9</td></tr>.<tr>
4a00: 3c 74 64 3e 53 51 4c 69 74 65 20 32 2e 37 2e 36  <td>SQLite 2.7.6
4a10: 20 28 6e 6f 73 79 6e 63 29 3a 3c 2f 74 64 3e 3c   (nosync):</td><
4a20: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
4a30: 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  >&nbsp;&nbsp;&nb
4a40: 73 70 3b 30 2e 32 35 34 3c 2f 74 64 3e 3c 2f 74  sp;0.254</td></t
4a50: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e  r>.</table>..<p>
4a60: 0a 53 51 4c 69 74 65 20 69 73 20 73 6c 6f 77 65  .SQLite is slowe
4a70: 72 20 74 68 61 6e 20 74 68 65 20 6f 74 68 65 72  r than the other
4a80: 20 64 61 74 61 62 61 73 65 73 20 77 68 65 6e 20   databases when 
4a90: 69 74 20 63 6f 6d 65 73 20 74 6f 20 64 72 6f 70  it comes to drop
4aa0: 70 69 6e 67 20 74 61 62 6c 65 73 2e 0a 54 68 69  ping tables..Thi
4ab0: 73 20 70 72 6f 62 61 62 6c 79 20 69 73 20 62 65  s probably is be
4ac0: 63 61 75 73 65 20 77 68 65 6e 20 53 51 4c 69 74  cause when SQLit
4ad0: 65 20 64 72 6f 70 73 20 61 20 74 61 62 6c 65 2c  e drops a table,
4ae0: 20 69 74 20 68 61 73 20 74 6f 20 67 6f 20 74 68   it has to go th
4af0: 72 6f 75 67 68 20 61 6e 64 0a 65 72 61 73 65 20  rough and.erase 
4b00: 74 68 65 20 72 65 63 6f 72 64 73 20 69 6e 20 74  the records in t
4b10: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
4b20: 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
4b30: 74 68 61 74 20 74 61 62 6c 65 2e 20 20 4d 79 53  that table.  MyS
4b40: 51 4c 20 61 6e 64 0a 50 6f 73 74 67 72 65 53 51  QL and.PostgreSQ
4b50: 4c 2c 20 6f 6e 20 74 68 65 20 6f 74 68 65 72 20  L, on the other 
4b60: 68 61 6e 64 2c 20 75 73 65 20 73 65 70 61 72 61  hand, use separa
4b70: 74 65 20 66 69 6c 65 73 20 74 6f 20 72 65 70 72  te files to repr
4b80: 65 73 65 6e 74 20 65 61 63 68 20 74 61 62 6c 65  esent each table
4b90: 0a 73 6f 20 74 68 65 79 20 63 61 6e 20 64 72 6f  .so they can dro
4ba0: 70 20 61 20 74 61 62 6c 65 20 73 69 6d 70 6c 79  p a table simply
4bb0: 20 62 79 20 64 65 6c 65 74 69 6e 67 20 61 20 66   by deleting a f
4bc0: 69 6c 65 2c 20 77 68 69 63 68 20 69 73 20 6d 75  ile, which is mu
4bd0: 63 68 20 66 61 73 74 65 72 2e 0a 3c 2f 70 3e 0a  ch faster..</p>.
4be0: 0a 3c 70 3e 0a 4f 6e 20 74 68 65 20 6f 74 68 65  .<p>.On the othe
4bf0: 72 20 68 61 6e 64 2c 20 64 72 6f 70 70 69 6e 67  r hand, dropping
4c00: 20 74 61 62 6c 65 73 20 69 73 20 6e 6f 74 20 61   tables is not a
4c10: 20 76 65 72 79 20 63 6f 6d 6d 6f 6e 20 6f 70 65   very common ope
4c20: 72 61 74 69 6f 6e 20 0a 73 6f 20 69 66 20 53 51  ration .so if SQ
4c30: 4c 69 74 65 20 74 61 6b 65 73 20 61 20 6c 69 74  Lite takes a lit
4c40: 74 6c 65 20 6c 6f 6e 67 65 72 2c 20 74 68 61 74  tle longer, that
4c50: 20 69 73 20 6e 6f 74 20 73 65 65 6e 20 61 73 20   is not seen as 
4c60: 61 20 62 69 67 20 70 72 6f 62 6c 65 6d 2e 0a 3c  a big problem..<
4c70: 2f 70 3e 0a 0a 7d 0a 66 6f 6f 74 65 72 20 24 72  /p>..}.footer $r
4c80: 63 73 69 64 0a                                   csid.