]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Attempt to improvement performance of multiple OP_Columns that occur in a row. column-optimization
authordrh <>
Tue, 11 Feb 2025 16:00:52 +0000 (16:00 +0000)
committerdrh <>
Tue, 11 Feb 2025 16:00:52 +0000 (16:00 +0000)
Minimal improvement for a lot of complexity and risk.

FossilOrigin-Name: 53478f29347c7f17d46ec2a1e7c390c9be9e9fc32f31da77a4ba7a9d67440a8e

manifest
manifest.uuid
src/vdbe.c

index 68312e890c446d8a99aec8072f2b68db7169020c..859d9812de1b35090262a954385694e1795a0824 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\sa\spointless\sline\sof\scode.
-D 2025-02-10T19:48:13.176
+C Attempt\sto\simprovement\sperformance\sof\smultiple\sOP_Columns\sthat\soccur\sin\sa\srow.\nMinimal\simprovement\sfor\sa\slot\sof\scomplexity\sand\srisk.
+D 2025-02-11T16:00:52.467
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -849,7 +849,7 @@ F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1
 F src/utf.c 8b29d9a5956569ea2700f869669b8ef67a9662ee5e724ff77ab3c387e27094ba
 F src/util.c 9ff6470dabcf943fd796d2da766c98bd328c8f6fe036a31e5b338e628603f989
 F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40
-F src/vdbe.c b98d86de7f0e6c02fb14e0e1ae8feab6aa84669d389771a848e23f59eb70dcad
+F src/vdbe.c eeb0882a45918150d9576f5bbcaa255689082e70cc9abf82287439bc39440edf
 F src/vdbe.h 3d26d5c7660c5c7bd33ffb0d8784615072d8b23c81f8110870efe2631136bc89
 F src/vdbeInt.h 078b1c15b26587b54c1c1879d0d2f4dec812b9de4c337fed9faf73fbcc3bf091
 F src/vdbeapi.c 82fe278a7c71b653235c6f9fb5de0b5de589908dfcb011ba2a782e8becf06f86
@@ -2209,8 +2209,12 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 6b9007cb30257ca97de74dec1df47f46f238f034083517a51c24334e4bd30663
-R 6d33e5e79434d78cc0854681af5e3875
+P 57b2b812c8c5524f315e20cee0e6a12a3b1635aeb42925bf891532a7029d0eb0
+R 5b40ead92f50e29d43d44519f8927a47
+T *branch * column-optimization
+T *sym-column-optimization *
+T +closed *
+T -sym-trunk *
 U drh
-Z 4cd996db652c357ad0cb2f7e1b69e405
+Z 359be1e71666f10555b25682f42340bf
 # Remove this line to create a well-formed Fossil manifest.
index 862aaf2925931b1ec34c887b54b35578f869ca55..b4aacdb2c2fbdd41c512459b65b5a201757c9622 100644 (file)
@@ -1 +1 @@
-57b2b812c8c5524f315e20cee0e6a12a3b1635aeb42925bf891532a7029d0eb0
+53478f29347c7f17d46ec2a1e7c390c9be9e9fc32f31da77a4ba7a9d67440a8e
index ec871c5a6e8f51183f58cfb20af7e20f89ccb754..f6aefeea1a0ad625166dfe34f11affdb18bb896c 100644 (file)
@@ -3055,6 +3055,7 @@ op_column_restart:
     goto op_column_restart;
   }
 
+op_column_again:
   /* Make sure at least the first p2+1 entries of the header have been
   ** parsed and valid information is in aOffset[] and pC->aType[].
   */
@@ -3210,6 +3211,30 @@ op_column_restart:
     }
   }
 
+  /* Try to save work if two or more OP_Columns against the same
+  ** cursor occur one right after another.
+  **
+  ** This optimization saves CPU cycles when it applies.  But it is
+  ** not applicable very often.  So we often burn more CPU cycles
+  ** determining whether or not the optimization does apply than the
+  ** optimization actually saves, depending on the workload.  Even
+  ** when there is a net gain, it is not that much.
+  **
+  ** This change (and this comment) are saved for future reference.
+  ** But unless some further improvement is found, it does not seem
+  ** worth the added complexity.
+  */
+  if( pOp[1].opcode==OP_Column
+   && pC==p->apCsr[pOp[1].p1]
+  ){
+    UPDATE_MAX_BLOBSIZE(pDest);
+    REGISTER_TRACE(pOp->p3, pDest);
+    pOp++;
+    nVmStep++;
+    p2 = (u32)pOp->p2;
+    goto op_column_again;
+  }
+
 op_column_out:
   UPDATE_MAX_BLOBSIZE(pDest);
   REGISTER_TRACE(pOp->p3, pDest);