System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 3f5cd4ae0020b7cbebcc12907dec1291318f2175:


0000: 3c 21 44 4f 43 54 59 50 45 20 48 54 4d 4c 20 50  <!DOCTYPE HTML P
0010: 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 2f 2f 44  UBLIC "-//W3C//D
0020: 54 44 20 48 54 4d 4c 20 34 2e 30 20 54 72 61 6e  TD HTML 4.0 Tran
0030: 73 69 74 69 6f 6e 61 6c 2f 2f 45 4e 22 3e 0a 3c  sitional//EN">.<
0040: 68 74 6d 6c 3e 0a 20 20 3c 68 65 61 64 3e 0a 20  html>.  <head>. 
0050: 20 20 20 3c 74 69 74 6c 65 3e 4f 70 74 69 6d 69     <title>Optimi
0060: 7a 69 6e 67 20 53 51 4c 69 74 65 3c 2f 74 69 74  zing SQLite</tit
0070: 6c 65 3e 0a 20 20 20 20 3c 6d 65 74 61 20 6e 61  le>.    <meta na
0080: 6d 65 3d 22 47 45 4e 45 52 41 54 4f 52 22 20 63  me="GENERATOR" c
0090: 6f 6e 74 65 6e 74 3d 22 4d 69 63 72 6f 73 6f 66  ontent="Microsof
00a0: 74 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  t Visual Studio 
00b0: 2e 4e 45 54 20 37 2e 31 22 3e 0a 20 20 20 20 3c  .NET 7.1">.    <
00c0: 6d 65 74 61 20 6e 61 6d 65 3d 22 76 73 5f 74 61  meta name="vs_ta
00d0: 72 67 65 74 53 63 68 65 6d 61 22 20 63 6f 6e 74  rgetSchema" cont
00e0: 65 6e 74 3d 22 68 74 74 70 3a 2f 2f 73 63 68 65  ent="http://sche
00f0: 6d 61 73 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f  mas.microsoft.co
0100: 6d 2f 69 6e 74 65 6c 6c 69 73 65 6e 73 65 2f 69  m/intellisense/i
0110: 65 35 22 3e 0a 20 20 20 20 3c 6c 69 6e 6b 20 72  e5">.    <link r
0120: 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 74 22 20  el="stylesheet" 
0130: 74 79 70 65 3d 22 74 65 78 74 2f 63 73 73 22 20  type="text/css" 
0140: 68 72 65 66 3d 22 4d 53 44 4e 2e 63 73 73 22 20  href="MSDN.css" 
0150: 2f 3e 0a 20 20 3c 2f 68 65 61 64 3e 0a 20 20 3c  />.  </head>.  <
0160: 62 6f 64 79 20 69 64 3d 22 62 6f 64 79 49 44 22  body id="bodyID"
0170: 20 63 6c 61 73 73 3d 22 64 74 42 4f 44 59 22 3e   class="dtBODY">
0180: 0a 20 20 20 20 3c 64 69 76 20 69 64 3d 22 6e 73  .    <div id="ns
0190: 62 61 6e 6e 65 72 22 3e 0a 20 20 20 20 20 20 3c  banner">.      <
01a0: 64 69 76 20 69 64 3d 22 62 61 6e 6e 65 72 72 6f  div id="bannerro
01b0: 77 31 22 3e 0a 20 20 20 20 20 20 20 20 3c 74 61  w1">.        <ta
01c0: 62 6c 65 20 63 6c 61 73 73 3d 22 62 61 6e 6e 65  ble class="banne
01d0: 72 70 61 72 74 68 65 61 64 22 20 63 65 6c 6c 73  rparthead" cells
01e0: 70 61 63 69 6e 67 3d 22 30 22 20 49 44 3d 22 54  pacing="0" ID="T
01f0: 61 62 6c 65 31 22 3e 0a 20 20 20 20 20 20 20 20  able1">.        
0200: 20 20 3c 74 72 20 69 64 3d 22 68 64 72 22 3e 0a    <tr id="hdr">.
0210: 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 20              <td 
0220: 63 6c 61 73 73 3d 22 72 75 6e 6e 69 6e 67 68 65  class="runninghe
0230: 61 64 22 3e 4f 70 74 69 6d 69 7a 69 6e 67 20 66  ad">Optimizing f
0240: 6f 72 20 53 51 4c 69 74 65 3c 2f 74 64 3e 0a 20  or SQLite</td>. 
0250: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 20 63             <td c
0260: 6c 61 73 73 3d 22 70 72 6f 64 75 63 74 22 3e 0a  lass="product">.
0270: 20 20 20 20 20 20 20 20 20 20 20 20 3c 2f 74 64              </td
0280: 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 2f 74 72  >.          </tr
0290: 3e 0a 20 20 20 20 20 20 20 20 3c 2f 74 61 62 6c  >.        </tabl
02a0: 65 3e 0a 20 20 20 20 20 20 3c 2f 64 69 76 3e 0a  e>.      </div>.
02b0: 20 20 20 20 20 20 3c 64 69 76 20 69 64 3d 22 54        <div id="T
02c0: 69 74 6c 65 52 6f 77 22 3e 0a 20 20 20 20 20 20  itleRow">.      
02d0: 20 20 3c 68 31 20 63 6c 61 73 73 3d 22 64 74 48    <h1 class="dtH
02e0: 31 22 3e 53 51 4c 69 74 65 2e 4e 45 54 20 43 6c  1">SQLite.NET Cl
02f0: 61 73 73 20 4c 69 62 72 61 72 79 20 44 6f 63 75  ass Library Docu
0300: 6d 65 6e 74 61 74 69 6f 6e 3c 2f 68 31 3e 0a 20  mentation</h1>. 
0310: 20 20 20 20 20 3c 2f 64 69 76 3e 0a 20 20 20 20       </div>.    
0320: 3c 2f 64 69 76 3e 0a 20 20 20 20 3c 64 69 76 20  </div>.    <div 
0330: 69 64 3d 22 6e 73 74 65 78 74 22 3e 0a 20 20 20  id="nstext">.   
0340: 20 20 20 3c 68 31 20 63 6c 61 73 73 3d 22 64 74     <h1 class="dt
0350: 48 31 22 3e 54 69 70 73 20 6f 6e 20 4f 70 74 69  H1">Tips on Opti
0360: 6d 69 7a 69 6e 67 20 59 6f 75 72 20 51 75 65 72  mizing Your Quer
0370: 69 65 73 3c 2f 68 31 3e 0a 20 20 20 20 20 20 3c  ies</h1>.      <
0380: 70 3e 54 68 65 20 6e 65 78 74 20 66 65 77 20 70  p>The next few p
0390: 61 72 61 67 72 61 70 68 73 20 77 69 6c 6c 20 61  aragraphs will a
03a0: 74 74 65 6d 70 74 20 74 6f 20 67 69 76 65 20 79  ttempt to give y
03b0: 6f 75 20 61 20 66 65 77 20 72 75 64 69 6d 65 6e  ou a few rudimen
03c0: 74 61 72 79 20 72 75 6c 65 73 20 66 6f 72 20 0a  tary rules for .
03d0: 20 20 20 20 20 20 20 20 73 70 65 65 64 69 6e 67          speeding
03e0: 20 75 70 20 79 6f 75 72 20 71 75 65 72 69 65 73   up your queries
03f0: 20 69 6e 20 67 65 6e 65 72 61 6c 2c 20 61 6e 64   in general, and
0400: 20 65 73 70 65 63 69 61 6c 6c 79 20 68 6f 77 20   especially how 
0410: 53 51 4c 69 74 65 20 69 73 20 61 64 76 65 72 73  SQLite is advers
0420: 65 6c 79 20 0a 20 20 20 20 20 20 20 20 61 66 66  ely .        aff
0430: 65 63 74 65 64 20 62 79 20 74 68 65 20 6b 69 6e  ected by the kin
0440: 64 73 20 6f 66 20 53 51 4c 20 62 65 68 61 76 69  ds of SQL behavi
0450: 6f 72 73 20 79 6f 75 20 6d 61 79 20 68 61 76 65  ors you may have
0460: 20 74 61 6b 65 6e 20 66 6f 72 20 67 72 61 6e 74   taken for grant
0470: 65 64 20 69 6e 20 6f 74 68 65 72 20 0a 20 20 20  ed in other .   
0480: 20 20 20 20 20 70 72 6f 76 69 64 65 72 73 2e 20       providers. 
0490: 49 74 20 69 73 20 62 79 20 6e 6f 20 6d 65 61 6e  It is by no mean
04a0: 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6f 70 74  s a complete opt
04b0: 69 6d 69 7a 61 74 69 6f 6e 20 67 75 69 64 65 2e  imization guide.
04c0: 20 46 6f 72 20 65 76 65 6e 20 6d 6f 72 65 20 0a   For even more .
04d0: 20 20 20 20 20 20 20 20 64 65 74 61 69 6c 73 20          details 
04e0: 6f 6e 20 6f 70 74 69 6d 69 7a 69 6e 67 20 79 6f  on optimizing yo
04f0: 75 72 20 71 75 65 72 69 65 73 2c 20 76 69 73 69  ur queries, visi
0500: 74 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a  t <a href="http:
0510: 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67  //www.sqlite.org
0520: 22 3e 73 71 6c 69 74 65 2e 6f 72 67 3c 2f 61 3e  ">sqlite.org</a>
0530: 2e 3c 2f 70 3e 0a 20 20 20 20 20 20 3c 68 34 20  .</p>.      <h4 
0540: 63 6c 61 73 73 3d 22 64 74 48 34 22 3e 54 68 65  class="dtH4">The
0550: 20 49 6d 70 6f 72 74 61 6e 63 65 20 6f 66 20 54   Importance of T
0560: 72 61 6e 73 61 63 74 69 6f 6e 73 3c 2f 68 34 3e  ransactions</h4>
0570: 0a 20 20 20 20 20 20 3c 70 3e 49 66 20 79 6f 75  .      <p>If you
0580: 20 61 72 65 20 69 6e 73 65 72 74 69 6e 67 20 64   are inserting d
0590: 61 74 61 20 69 6e 20 53 51 4c 69 74 65 20 77 69  ata in SQLite wi
05a0: 74 68 6f 75 74 20 66 69 72 73 74 20 73 74 61 72  thout first star
05b0: 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69  ting a transacti
05c0: 6f 6e 3a 20 3c 62 3e 44 4f 20 0a 20 20 20 20 20  on: <b>DO .     
05d0: 20 20 20 20 20 4e 4f 54 20 50 41 53 53 20 47 4f       NOT PASS GO
05e0: 21 20 43 61 6c 6c 20 42 65 67 69 6e 54 72 61 6e  ! Call BeginTran
05f0: 73 61 63 74 69 6f 6e 28 29 20 72 69 67 68 74 20  saction() right 
0600: 6e 6f 77 2c 20 61 6e 64 20 66 69 6e 69 73 68 20  now, and finish 
0610: 77 69 74 68 20 43 6f 6d 6d 69 74 28 29 21 3c 2f  with Commit()!</
0620: 62 3e 20 0a 20 20 20 20 20 20 20 20 49 66 20 79  b> .        If y
0630: 6f 75 20 74 68 69 6e 6b 20 49 27 6d 20 6b 69 64  ou think I'm kid
0640: 64 69 6e 67 2c 20 74 68 69 6e 6b 20 61 67 61 69  ding, think agai
0650: 6e 2e 20 53 51 4c 69 74 65 27 73 20 41 2e 43 2e  n. SQLite's A.C.
0660: 49 2e 44 2e 20 64 65 73 69 67 6e 20 6d 65 61 6e  I.D. design mean
0670: 73 20 74 68 61 74 20 0a 20 20 20 20 20 20 20 20  s that .        
0680: 65 76 65 72 79 20 73 69 6e 67 6c 65 20 74 69 6d  every single tim
0690: 65 20 79 6f 75 20 69 6e 73 65 72 74 20 61 6e 79  e you insert any
06a0: 20 64 61 74 61 20 6f 75 74 73 69 64 65 20 61 20   data outside a 
06b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 6e 20  transaction, an 
06c0: 69 6d 70 6c 69 63 69 74 20 0a 20 20 20 20 20 20  implicit .      
06d0: 20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73    transaction is
06e0: 20 63 6f 6e 73 74 72 75 63 74 65 64 2c 20 74 68   constructed, th
06f0: 65 20 69 6e 73 65 72 74 20 6d 61 64 65 2c 20 61  e insert made, a
0700: 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  nd the transacti
0710: 6f 6e 20 64 65 73 74 72 75 63 74 65 64 2e 20 3c  on destructed. <
0720: 62 3e 45 56 45 52 59 20 0a 20 20 20 20 20 20 20  b>EVERY .       
0730: 20 20 20 54 49 4d 45 2e 3c 2f 62 3e 20 49 66 20     TIME.</b> If 
0740: 79 6f 75 27 72 65 20 77 6f 6e 64 65 72 69 6e 67  you're wondering
0750: 20 77 68 79 20 69 6e 20 74 68 65 20 77 6f 72 6c   why in the worl
0760: 64 20 79 6f 75 72 20 69 6e 73 65 72 74 73 20 61  d your inserts a
0770: 72 65 20 74 61 6b 69 6e 67 20 31 30 30 78 20 0a  re taking 100x .
0780: 20 20 20 20 20 20 20 20 6c 6f 6e 67 65 72 20 74          longer t
0790: 68 61 6e 20 79 6f 75 20 74 68 69 6e 6b 20 74 68  han you think th
07a0: 65 79 20 73 68 6f 75 6c 64 2c 20 6c 6f 6f 6b 20  ey should, look 
07b0: 6e 6f 20 66 75 72 74 68 65 72 2e 3c 2f 70 3e 0a  no further.</p>.
07c0: 20 20 20 20 20 20 3c 68 34 20 63 6c 61 73 73 3d        <h4 class=
07d0: 22 64 74 48 34 22 3e 50 72 65 70 61 72 65 64 20  "dtH4">Prepared 
07e0: 53 74 61 74 65 6d 65 6e 74 73 3c 2f 68 34 3e 0a  Statements</h4>.
07f0: 20 20 20 20 20 20 3c 70 3e 4c 65 74 73 20 68 61        <p>Lets ha
0800: 76 65 20 61 20 71 75 69 63 6b 20 6c 6f 6f 6b 20  ve a quick look 
0810: 61 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  at the following
0820: 20 63 6f 64 65 20 61 6e 64 20 65 76 61 6c 75 61   code and evalua
0830: 74 65 20 69 74 73 20 70 65 72 66 6f 72 6d 61 6e  te its performan
0840: 63 65 3a 3c 2f 70 3e 0a 20 20 20 20 20 20 3c 64  ce:</p>.      <d
0850: 69 76 20 63 6c 61 73 73 3d 22 73 79 6e 74 61 78  iv class="syntax
0860: 22 3e 0a 20 20 20 20 20 20 20 20 3c 70 72 65 3e  ">.        <pre>
0870: 0a 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51  .      using (SQ
0880: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 6d 79 63 6f  LiteCommand myco
0890: 6d 6d 61 6e 64 20 3d 20 6e 65 77 20 53 51 4c 69  mmand = new SQLi
08a0: 74 65 43 6f 6d 6d 61 6e 64 28 6d 79 63 6f 6e 6e  teCommand(myconn
08b0: 65 63 74 69 6f 6e 29 29 0a 20 20 20 20 20 20 7b  ection)).      {
08c0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 3b 0a  .        int n;.
08d0: 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20          .       
08e0: 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c   for (n = 0; n <
08f0: 20 31 30 30 30 30 30 3b 20 6e 20 2b 2b 29 0a 20   100000; n ++). 
0900: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
0910: 20 20 20 6d 79 63 6f 6d 6d 61 6e 64 2e 43 6f 6d     mycommand.Com
0920: 6d 61 6e 64 54 65 78 74 20 3d 20 53 74 72 69 6e  mandText = Strin
0930: 67 2e 46 6f 72 6d 61 74 28 22 49 4e 53 45 52 54  g.Format("INSERT
0940: 20 49 4e 54 4f 20 5b 4d 79 54 61 62 6c 65 5d 20   INTO [MyTable] 
0950: 28 5b 4d 79 49 64 5d 29 20 56 41 4c 55 45 53 28  ([MyId]) VALUES(
0960: 7b 30 7d 29 22 2c 20 6e 20 2b 20 31 29 3b 0a 20  {0})", n + 1);. 
0970: 20 20 20 20 20 20 20 20 20 6d 79 63 6f 6d 6d 61           mycomma
0980: 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65  nd.ExecuteNonQue
0990: 72 79 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ry();.        }.
09a0: 20 20 20 20 20 20 7d 3c 2f 70 72 65 3e 0a 20 20        }</pre>.  
09b0: 20 20 20 20 3c 2f 64 69 76 3e 0a 20 20 20 20 20      </div>.     
09c0: 20 3c 70 3e 54 68 69 73 20 63 6f 64 65 20 73 65   <p>This code se
09d0: 65 6d 73 20 70 72 65 74 74 79 20 74 69 67 68 74  ems pretty tight
09e0: 2c 20 62 75 74 20 69 66 20 79 6f 75 20 74 68 69  , but if you thi
09f0: 6e 6b 20 69 74 20 70 65 72 66 6f 72 6d 73 20 77  nk it performs w
0a00: 65 6c 6c 2c 20 79 6f 75 27 72 65 20 64 65 61 64  ell, you're dead
0a10: 20 0a 20 20 20 20 20 20 20 20 77 72 6f 6e 67 2e   .        wrong.
0a20: 20 48 65 72 65 27 73 20 77 68 61 74 27 73 20 77   Here's what's w
0a30: 72 6f 6e 67 20 77 69 74 68 20 69 74 3a 3c 2f 70  rong with it:</p
0a40: 3e 0a 20 20 20 20 20 20 3c 75 6c 3e 0a 20 20 20  >.      <ul>.   
0a50: 20 20 20 20 20 3c 6c 69 3e 0a 20 20 20 20 20 20       <li>.      
0a60: 20 20 20 20 49 20 64 69 64 6e 27 74 20 73 74 61      I didn't sta
0a70: 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
0a80: 20 66 69 72 73 74 21 20 54 68 69 73 20 69 6e 73   first! This ins
0a90: 65 72 74 20 69 73 20 64 6f 67 20 73 6c 6f 77 21  ert is dog slow!
0aa0: 3c 2f 6c 69 3e 0a 20 20 20 20 20 20 20 20 3c 6c  </li>.        <l
0ab0: 69 3e 0a 20 20 20 20 20 20 20 20 20 20 54 68 65  i>.          The
0ac0: 20 43 4c 52 20 69 73 20 63 61 6c 6c 69 6e 67 20   CLR is calling 
0ad0: 22 6e 65 77 22 20 69 6d 70 6c 69 63 69 74 6c 79  "new" implicitly
0ae0: 20 31 30 30 2c 30 30 30 20 74 69 6d 65 73 20 62   100,000 times b
0af0: 65 63 61 75 73 65 20 49 20 61 6d 20 66 6f 72 6d  ecause I am form
0b00: 61 74 74 69 6e 67 20 61 20 0a 20 20 20 20 20 20  atting a .      
0b10: 20 20 20 20 73 74 72 69 6e 67 20 69 6e 20 74 68      string in th
0b20: 65 20 6c 6f 6f 70 20 66 6f 72 20 65 76 65 72 79  e loop for every
0b30: 20 69 6e 73 65 72 74 3c 2f 6c 69 3e 0a 20 20 20   insert</li>.   
0b40: 20 20 20 20 20 3c 6c 69 3e 0a 20 20 20 20 20 20       <li>.      
0b50: 20 20 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65      Since SQLite
0b60: 20 70 72 65 63 6f 6d 70 69 6c 65 73 20 53 51 4c   precompiles SQL
0b70: 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68 65   statements, the
0b80: 20 65 6e 67 69 6e 65 20 69 73 20 63 6f 6e 73 74   engine is const
0b90: 72 75 63 74 69 6e 67 20 61 6e 64 20 0a 20 20 20  ructing and .   
0ba0: 20 20 20 20 20 20 20 64 65 63 6f 6e 73 74 72 75         deconstru
0bb0: 63 74 69 6e 67 20 31 30 30 2c 30 30 30 20 53 51  cting 100,000 SQ
0bc0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  L statements and
0bd0: 20 61 6c 6c 6f 63 61 74 69 6e 67 2f 64 65 61 6c   allocating/deal
0be0: 6c 6f 63 61 74 69 6e 67 20 74 68 65 69 72 20 6d  locating their m
0bf0: 65 6d 6f 72 79 3c 2f 6c 69 3e 0a 20 20 20 20 20  emory</li>.     
0c00: 20 20 20 3c 6c 69 3e 0a 20 20 20 20 20 20 20 20     <li>.        
0c10: 20 20 41 6c 6c 20 74 68 69 73 20 63 6f 6e 73 74    All this const
0c20: 72 75 63 74 69 6f 6e 20 61 6e 64 20 64 65 73 74  ruction and dest
0c30: 72 75 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6c  ruction is invol
0c40: 76 69 6e 67 20 61 62 6f 75 74 20 33 30 30 2c 30  ving about 300,0
0c50: 30 30 20 6d 6f 72 65 20 6e 61 74 69 76 65 20 74  00 more native t
0c60: 6f 20 0a 20 20 20 20 20 20 20 20 20 20 6d 61 6e  o .          man
0c70: 61 67 65 64 20 69 6e 74 65 72 6f 70 20 63 61 6c  aged interop cal
0c80: 6c 73 20 74 68 61 6e 20 61 6e 20 6f 70 74 69 6d  ls than an optim
0c90: 69 7a 65 64 20 69 6e 73 65 72 74 3c 2f 6c 69 3e  ized insert</li>
0ca0: 0a 20 20 20 20 20 20 3c 2f 75 6c 3e 0a 20 20 20  .      </ul>.   
0cb0: 20 20 20 3c 70 3e 53 6f 20 6c 65 74 73 20 72 65     <p>So lets re
0cc0: 77 72 69 74 65 20 74 68 61 74 20 63 6f 64 65 20  write that code 
0cd0: 73 6c 69 67 68 74 6c 79 3a 3c 2f 70 3e 0a 20 20  slightly:</p>.  
0ce0: 20 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 22      <div class="
0cf0: 73 79 6e 74 61 78 22 3e 0a 20 20 20 20 20 20 20  syntax">.       
0d00: 20 3c 70 72 65 3e 0a 20 20 20 20 20 20 75 73 69   <pre>.      usi
0d10: 6e 67 20 28 53 51 4c 69 74 65 54 72 61 6e 73 61  ng (SQLiteTransa
0d20: 63 74 69 6f 6e 20 6d 79 74 72 61 6e 73 61 63 74  ction mytransact
0d30: 69 6f 6e 20 3d 20 6d 79 63 6f 6e 6e 65 63 74 69  ion = myconnecti
0d40: 6f 6e 2e 42 65 67 69 6e 54 72 61 6e 73 61 63 74  on.BeginTransact
0d50: 69 6f 6e 28 29 29 0a 20 20 20 20 20 20 7b 0a 20  ion()).      {. 
0d60: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
0d70: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 6d 79 63 6f  LiteCommand myco
0d80: 6d 6d 61 6e 64 20 3d 20 6e 65 77 20 53 51 4c 69  mmand = new SQLi
0d90: 74 65 43 6f 6d 6d 61 6e 64 28 6d 79 63 6f 6e 6e  teCommand(myconn
0da0: 65 63 74 69 6f 6e 29 29 0a 20 20 20 20 20 20 20  ection)).       
0db0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c   {.          SQL
0dc0: 69 74 65 50 61 72 61 6d 65 74 65 72 20 6d 79 70  iteParameter myp
0dd0: 61 72 61 6d 20 3d 20 6e 65 77 20 53 51 4c 69 74  aram = new SQLit
0de0: 65 50 61 72 61 6d 65 74 65 72 28 29 3b 0a 20 20  eParameter();.  
0df0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 3b 0a 20          int n;. 
0e00: 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20         .        
0e10: 20 20 6d 79 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d    mycommand.Comm
0e20: 61 6e 64 54 65 78 74 20 3d 20 22 49 4e 53 45 52  andText = "INSER
0e30: 54 20 49 4e 54 4f 20 5b 4d 79 54 61 62 6c 65 5d  T INTO [MyTable]
0e40: 20 28 5b 4d 79 49 64 5d 29 20 56 41 4c 55 45 53   ([MyId]) VALUES
0e50: 28 3f 29 22 3b 0a 20 20 20 20 20 20 20 20 20 20  (?)";.          
0e60: 6d 79 63 6f 6d 6d 61 6e 64 2e 50 61 72 61 6d 65  mycommand.Parame
0e70: 74 65 72 73 2e 41 64 64 28 6d 79 70 61 72 61 6d  ters.Add(myparam
0e80: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 0a 20 20  );.          .  
0e90: 20 20 20 20 20 20 20 20 66 6f 72 20 28 6e 20 3d          for (n =
0ea0: 20 30 3b 20 6e 20 3c 20 31 30 30 30 30 30 3b 20   0; n < 100000; 
0eb0: 6e 20 2b 2b 29 0a 20 20 20 20 20 20 20 20 20 20  n ++).          
0ec0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 79  {.            my
0ed0: 70 61 72 61 6d 2e 56 61 6c 75 65 20 3d 20 6e 20  param.Value = n 
0ee0: 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20  + 1;.           
0ef0: 20 6d 79 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75   mycommand.Execu
0f00: 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0a 20 20  teNonQuery();.  
0f10: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0f20: 20 20 7d 0a 20 20 20 20 20 20 20 20 6d 79 74 72    }.        mytr
0f30: 61 6e 73 61 63 74 69 6f 6e 2e 43 6f 6d 6d 69 74  ansaction.Commit
0f40: 28 29 3b 0a 20 20 20 20 20 20 7d 20 3c 2f 70 72  ();.      } </pr
0f50: 65 3e 0a 20 20 20 20 20 20 3c 2f 64 69 76 3e 0a  e>.      </div>.
0f60: 20 20 20 20 20 20 3c 70 3e 4e 6f 77 20 74 68 69        <p>Now thi
0f70: 73 20 69 73 20 61 20 62 6c 61 7a 69 6e 67 20 66  s is a blazing f
0f80: 61 73 74 20 69 6e 73 65 72 74 20 66 6f 72 20 3c  ast insert for <
0f90: 62 3e 3c 69 3e 61 6e 79 3c 2f 69 3e 3c 2f 62 3e  b><i>any</i></b>
0fa0: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
0fb0: 2c 20 6e 6f 74 20 0a 20 20 20 20 20 20 20 20 6a  , not .        j
0fc0: 75 73 74 20 53 51 4c 69 74 65 2e 20 54 68 65 20  ust SQLite. The 
0fd0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73  SQL statement is
0fe0: 20 70 72 65 70 61 72 65 64 20 6f 6e 65 20 74 69   prepared one ti
0ff0: 6d 65 20 2d 2d 20 6f 6e 20 74 68 65 20 66 69 72  me -- on the fir
1000: 73 74 20 63 61 6c 6c 20 74 6f 20 0a 20 20 20 20  st call to .    
1010: 20 20 20 20 45 78 65 63 75 74 65 4e 6f 6e 51 75      ExecuteNonQu
1020: 65 72 79 28 29 2e 20 4f 6e 63 65 20 70 72 65 70  ery(). Once prep
1030: 61 72 65 64 2c 20 69 74 20 6e 65 76 65 72 20 6e  ared, it never n
1040: 65 65 64 73 20 72 65 2d 65 76 61 6c 75 61 74 69  eeds re-evaluati
1050: 6e 67 2e 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  ng. Furthermore,
1060: 20 0a 20 20 20 20 20 20 20 20 77 65 27 72 65 20   .        we're 
1070: 61 6c 6c 6f 63 61 74 69 6e 67 20 6e 6f 20 6d 65  allocating no me
1080: 6d 6f 72 79 20 69 6e 20 74 68 65 20 6c 6f 6f 70  mory in the loop
1090: 20 61 6e 64 20 64 6f 69 6e 67 20 61 20 76 65 72   and doing a ver
10a0: 79 20 6d 69 6e 69 6d 61 6c 20 6e 75 6d 62 65 72  y minimal number
10b0: 20 6f 66 20 0a 20 20 20 20 20 20 20 20 69 6e 74   of .        int
10c0: 65 72 6f 70 20 74 72 61 6e 73 69 74 69 6f 6e 73  erop transitions
10d0: 2e 20 53 75 72 72 6f 75 6e 64 20 74 68 65 20 65  . Surround the e
10e0: 6e 74 69 72 65 20 74 68 69 6e 67 20 77 69 74 68  ntire thing with
10f0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20   a transaction, 
1100: 61 6e 64 20 74 68 65 20 0a 20 20 20 20 20 20 20  and the .       
1110: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20   performance of 
1120: 74 68 69 73 20 69 6e 73 65 72 74 20 69 73 20 73  this insert is s
1130: 6f 20 66 61 72 20 61 6e 64 20 61 77 61 79 20 66  o far and away f
1140: 61 73 74 65 72 20 74 68 61 6e 20 74 68 65 20 6f  aster than the o
1150: 72 69 67 69 6e 61 6c 20 74 68 61 74 20 69 74 20  riginal that it 
1160: 0a 20 20 20 20 20 20 20 20 6d 65 72 69 74 73 20  .        merits 
1170: 61 20 68 61 6e 64 73 2d 6f 6e 2d 74 68 65 2d 68  a hands-on-the-h
1180: 69 70 73 20 70 69 72 61 74 65 2d 6c 69 6b 65 20  ips pirate-like 
1190: 6c 61 75 67 68 2e 3c 2f 70 3e 0a 20 20 20 20 20  laugh.</p>.     
11a0: 20 3c 70 3e 45 76 65 72 79 20 64 61 74 61 62 61   <p>Every databa
11b0: 73 65 20 65 6e 67 69 6e 65 20 77 6f 72 74 68 20  se engine worth 
11c0: 69 74 73 20 73 61 6c 74 20 75 74 69 6c 69 7a 65  its salt utilize
11d0: 73 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  s prepared state
11e0: 6d 65 6e 74 73 2e 20 49 66 20 79 6f 75 27 72 65  ments. If you're
11f0: 20 0a 20 20 20 20 20 20 20 20 6e 6f 74 20 63 6f   .        not co
1200: 64 69 6e 67 20 66 6f 72 20 74 68 69 73 2c 20 79  ding for this, y
1210: 6f 75 27 72 65 20 6e 6f 74 20 77 72 69 74 69 6e  ou're not writin
1220: 67 20 6f 70 74 69 6d 69 7a 65 64 20 53 51 4c 2c  g optimized SQL,
1230: 20 61 6e 64 20 74 68 61 74 27 73 20 74 68 65 20   and that's the 
1240: 62 6f 74 74 6f 6d 20 0a 20 20 20 20 20 20 20 20  bottom .        
1250: 6c 69 6e 65 2e 0a 20 20 20 20 20 20 3c 2f 70 3e  line..      </p>
1260: 0a 20 20 20 20 20 20 3c 68 72 20 2f 3e 0a 20 20  .      <hr />.  
1270: 20 20 20 20 3c 64 69 76 20 69 64 3d 22 66 6f 6f      <div id="foo
1280: 74 65 72 22 3e 0a 20 20 20 20 20 20 20 20 3c 70  ter">.        <p
1290: 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 61 20 68  >.          <a h
12a0: 72 65 66 3d 22 6d 61 69 6c 74 6f 3a 72 6f 62 65  ref="mailto:robe
12b0: 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65 73 6f  rt@blackcastleso
12c0: 66 74 2e 63 6f 6d 3f 73 75 62 6a 65 63 74 3d 53  ft.com?subject=S
12d0: 51 4c 69 74 65 2e 4e 45 54 25 32 30 43 6c 61 73  QLite.NET%20Clas
12e0: 73 25 32 30 4c 69 62 72 61 72 79 25 32 30 44 6f  s%20Library%20Do
12f0: 63 75 6d 65 6e 74 61 74 69 6f 6e 25 32 30 46 65  cumentation%20Fe
1300: 65 64 62 61 63 6b 3a 25 32 30 4f 70 74 69 6d 69  edback:%20Optimi
1310: 7a 69 6e 67 22 3e 0a 20 20 20 20 20 20 20 20 20  zing">.         
1320: 20 20 20 53 65 6e 64 20 63 6f 6d 6d 65 6e 74 73     Send comments
1330: 20 6f 6e 20 74 68 69 73 20 74 6f 70 69 63 2e 3c   on this topic.<
1340: 2f 61 3e 0a 20 20 20 20 20 20 20 20 3c 2f 70 3e  /a>.        </p>
1350: 0a 20 20 20 20 20 20 20 20 3c 70 3e 0a 20 20 20  .        <p>.   
1360: 20 20 20 20 20 3c 2f 70 3e 0a 20 20 20 20 20 20       </p>.      
1370: 3c 2f 64 69 76 3e 0a 20 20 20 20 3c 2f 64 69 76  </div>.    </div
1380: 3e 0a 20 20 3c 2f 62 6f 64 79 3e 0a 3c 2f 68 74  >.  </body>.</ht
1390: 6d 6c 3e 0a                                      ml>.