From 3e60cdc3c0beb896f50cf0630b4283aebf60e877 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 30 Aug 2005 22:44:05 +0000 Subject: [PATCH] Initial work on documentation describing the optimizer. (CVS 2645) FossilOrigin-Name: 5cebd7ba3ccbdd0f4c8fe77091992f52d3a4b24c --- manifest | 16 ++- manifest.uuid | 2 +- www/direct1b.gif | Bin 0 -> 11439 bytes www/fullscanb.gif | Bin 0 -> 11946 bytes www/index-ex1-x-b.gif | Bin 0 -> 23173 bytes www/indirect1b1.gif | Bin 0 -> 18098 bytes www/optimizer.tcl | 265 ++++++++++++++++++++++++++++++++++++++++++ www/table-ex1b2.gif | Bin 0 -> 10888 bytes 8 files changed, 277 insertions(+), 6 deletions(-) create mode 100644 www/direct1b.gif create mode 100644 www/fullscanb.gif create mode 100644 www/index-ex1-x-b.gif create mode 100644 www/indirect1b1.gif create mode 100644 www/optimizer.tcl create mode 100644 www/table-ex1b2.gif diff --git a/manifest b/manifest index b0741800c8..d6e64990e7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C The\sCSV\soutput\smode\sdoes\snot\ssign-extend\sbytes\swhere\sthe\shigh-order\sbit\sis\sset.\nTicket\s#1397.\s(CVS\s2644) -D 2005-08-30T20:12:02 +C Initial\swork\son\sdocumentation\sdescribing\sthe\soptimizer.\s(CVS\s2645) +D 2005-08-30T22:44:06 F Makefile.in 12784cdce5ffc8dfb707300c34e4f1eb3b8a14f1 F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -275,13 +275,17 @@ F www/copyright.tcl 82c9670c7ddb0311912ab7fe24703f33c531066c F www/datatype3.tcl 1d14f70ab73075556b95e76a5c13e5b03f7f6c47 F www/datatypes.tcl 7c786d2e8ff434346764534ec015966d17efce60 F www/different.tcl d01064946c588db0a0e87563a30aef1b3efb4434 +F www/direct1b.gif 32b48b764244817b6b591898dc52a04299a7b8a7 F www/docs.tcl 6c0b2c567404b15bd46a0cda2dc69615a8e679a8 F www/download.tcl ceaa742d5b8137bce31e9dcc4e44494b38211490 F www/dynload.tcl 02eb8273aa78cfa9070dd4501dca937fb22b466c F www/faq.tcl 49f31a703f74c71ce66da646aaf18b07a5042672 F www/fileformat.tcl 900c95b9633abc3dcfc384d9ddd8eb4876793059 F www/formatchng.tcl 053ddb73646701353a5b1c9ca6274d5900739b45 +F www/fullscanb.gif f7c94cb227f060511f8909e10f570157263e9a25 +F www/index-ex1-x-b.gif f9b1d85c3fa2435cf38b15970c7e3aa1edae23a3 F www/index.tcl 853525c11fb519dac801bcbbe0488c447e526e7b +F www/indirect1b1.gif adfca361d2df59e34f9c5cac52a670c2bfc303a1 F www/lang.tcl 422b21b899f6d84dd3fdd2d4b204061b6912efd2 F www/lockingv3.tcl f59b19d6c8920a931f096699d6faaf61c05db55f F www/mingw.tcl d96b451568c5d28545fefe0c80bee3431c73f69c @@ -289,17 +293,19 @@ F www/nulls.tcl ec35193f92485b87b90a994a01d0171b58823fcf F www/oldnews.tcl 1a808d86882621557774bf7741ed81c7f4ef9f19 F www/omitted.tcl f1e57977299c3ed54fbae55e4b5ea6a64de39e19 F www/opcode.tcl 5bd68059416b223515a680d410a9f7cb6736485f +F www/optimizer.tcl d6812a10269bd0d7c488987aac0ad5036cace9dc F www/optimizing.tcl f0b2538988d1bbad16cbfe63ec6e8f48c9eb04e5 F www/pragma.tcl 44f7b665ca598ad24724f35991653638a36a6e3f F www/quickstart.tcl 6f6f694b6139be2d967b1492eb9a6bdf7058aa60 F www/speed.tcl 656ed5be8cc9d536353e1a96927b925634a62933 F www/sqlite.tcl b51fd15f0531a54874de785a9efba323eecd5975 F www/support.tcl 3955da0fd82be68cc5c83d347c05095e80967051 +F www/table-ex1b2.gif a588d21a2d88bb2a2ef0431fcc5ed5aa48c0bbc5 F www/tclsqlite.tcl 3df553505b6efcad08f91e9b975deb2e6c9bb955 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P 0f7a53f78d9dd5c426be834f2d50a6fe4e860141 -R f1bc0e4a2c4ceb3e245064f15c4dbe8a +P 528df777e5d76077d8766f04ee222fd64d9373a6 +R 8ad712df9db8cfcf34688500c6dc35e9 U drh -Z 6881c22eb7e94b960094ada2d2c618e3 +Z 9fa61a38e2d65d933c87842c6fb4f4c0 diff --git a/manifest.uuid b/manifest.uuid index 3db40eed28..9ea1cb1a63 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -528df777e5d76077d8766f04ee222fd64d9373a6 \ No newline at end of file +5cebd7ba3ccbdd0f4c8fe77091992f52d3a4b24c \ No newline at end of file diff --git a/www/direct1b.gif b/www/direct1b.gif new file mode 100644 index 0000000000000000000000000000000000000000..8999a84e5c4c43c98ec6c260dbe44235ccf9eded GIT binary patch literal 11439 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 VTXFesrNZAToxjz_n*;z*{y()Lz*qnP literal 0 Hc-jL100001 diff --git a/www/fullscanb.gif b/www/fullscanb.gif new file mode 100644 index 0000000000000000000000000000000000000000..becb5149bc90804f2524ff8dfd21cc2314620af2 GIT binary patch literal 11946 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 X@{_Fo_xxyY>2b)V26+Pn0#yG8GC&Fh literal 0 Hc-jL100001 diff --git a/www/index-ex1-x-b.gif b/www/index-ex1-x-b.gif new file mode 100644 index 0000000000000000000000000000000000000000..37354ceca24abffacd560c1281d3813445edd8b0 GIT binary patch literal 23173 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 literal 0 Hc-jL100001 diff --git a/www/indirect1b1.gif b/www/indirect1b1.gif new file mode 100644 index 0000000000000000000000000000000000000000..25285d5e2bc2d477ec9fcf702bfaae846cabce0f GIT binary patch literal 18098 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 literal 0 Hc-jL100001 diff --git a/www/optimizer.tcl b/www/optimizer.tcl new file mode 100644 index 0000000000..5b2897e2bb --- /dev/null +++ b/www/optimizer.tcl @@ -0,0 +1,265 @@ +# +# Run this TCL script to generate HTML for the goals.html file. +# +set rcsid {$Id: optimizer.tcl,v 1.1 2005/08/30 22:44:06 drh Exp $} +source common.tcl +header {The SQLite Query Optimizer} + +proc CODE {text} { + puts "
"
+  puts $text
+  puts "
" +} +proc IMAGE {name {caption {}}} { + puts "
" + if {$caption!=""} { + puts "
$caption" + } + puts "
" +} +proc PARAGRAPH {text} { + puts "

$text

\n" +} +proc HEADING {level name} { + puts "$name" +} + +HEADING 1 {The SQLite Query Optimizer} + +PARAGRAPH { + This article describes how the SQLite query optimizer works. + This is not something you have to know in order to use SQLite - many + programmers use SQLite successfully without the slightest hint of what + goes on in the inside. + But a basic understanding of what SQLite is doing + behind the scenes will help you to write more efficient SQL. And the + knowledge gained by studying the SQLite query optimizer has broad + application since most other relational database engines operate + similarly. + A solid understanding of how the query optimizer works is also + required before making meaningful changes or additions to the SQLite, so + this article should be read closely by anyone aspiring + to hack the source code. +} + +HEADING 2 Background + +PARAGRAPH { + It is important to understand that SQL is a programming language. + SQL is a perculiar programming language in that it + describes what the programmer wants to compute not how + to compute it as most other programming languages do. + But perculiar or not, SQL is still just a programming language. +} + +PARAGRAPH { + It is very helpful to think of each SQL statement as a separate + program. + An important job of the SQL database engine is to translate each + SQL statement from its descriptive form that specifies what the + information is desired (the what) + into a procedural form that specifies how to go + about acquiring the desired information (the how). + The task of translating the what into a + how is assigned to the query optimizer. +} + +PARAGRAPH { + The beauty of SQL comes from the fact that the optimizer frees the programmer + from having to worry over the details of how. The programmer + only has to specify the what and then leave the optimizer + to deal with all of the minutae of implementing the + how. Thus the programmer is able to think and work at a + much higher level and leave the optimizer to stress over the low-level + work. +} + +HEADING 2 {Database Layout} + +PARAGRAPH { + An SQLite database consists of one or more "b-trees". + Each b-tree contains zero or more "rows". + A single row contains a "key" and some "data". + In general, both the key and the data are arbitrary binary + data of any length. + The keys must all be unique within a single b-tree. + Rows are stored in order of increasing key values - each + b-tree has a comparision functions for keys that determines + this order. +} + +PARAGRAPH { + In SQLite, each SQL table is stored as a b-tree where the + key is a 64-bit integer and the data is the content of the + table row. The 64-bit integer key is the ROWID. And, of course, + if the table has an INTEGER PRIMARY KEY, then that integer is just + an alias for the ROWID. +} + +PARAGRAPH { + Consider the following block of SQL code: +} + +CODE { + CREATE TABLE ex1( + id INTEGER PRIMARY KEY, + x VARCHAR(30), + y INTEGER + ); + INSERT INTO ex1 VALUES(NULL,'abc',12345); + INSERT INTO ex1 VALUES(NULL,456,'def'); + INSERT INTO ex1 VALUES(100,'hello','world'); + INSERT INTO ex1 VALUES(-5,'abc','xyz'); + INSERT INTO ex1 VALUES(54321,NULL,987); +} + +PARAGRAPH { + This code generates a new b-tree (named "ex1") containing 5 rows. + This table can be visualized as follows: +} +IMAGE table-ex1b2.gif + +PARAGRAPH { + Note that the key for each row if the b-tree is the INTEGER PRIMARY KEY + for that row. (Remember that the INTEGER PRIMARY KEY is just an alias + for the ROWID.) The other fields of the table form the data for each + entry in the b-tree. Note also that the b-tree entries are in ROWID order + which is different from the order that they were originally inserted. +} + +PARAGRAPH { + Now consider the following SQL query: +} +CODE { + SELECT y FROM ex1 WHERE x=456; +} + +PARAGRAPH { + When the SQLite parser and query optimizer are handed this query, they + have to translate it into a procedure that will find the desired result. + In this case, they do what is call a "full table scan". They start + at the beginning of the b-tree that contains the table and visit each + row. Within each row, the value of the "x" column is tested and when it + is found to match 456, the value of the "y" column is output. + We can represent this procedure graphically as follows: +} +IMAGE fullscanb.gif + +PARAGRAPH { + A full table scan is the access method of last resort. It will always + work. But if the table contains millions of rows and you are only looking + a single one, it might take a very long time to find the particular row + you are interested in. + In particular, the time needed to access a single row of the table is + proportional to the total number of rows in the table. + So a big part of the job of the optimizer is to try to find ways to + satisfy the query without doing a full table scan. +} +PARAGRAPH { + The usual way to avoid doing a full table scan is use a binary search + to find the particular row or rows of interest in the table. + Consider the next query which searches on rowid instead of x: +} +CODE { + SELECT y FROM ex1 WHERE rowid=2; +} + +PARAGRAPH { + In the previous query, we could not use a binary search for x because + the values of x were not ordered. But the rowid values are ordered. + So instead of having to visit every row of the b-tree looking for one + that has a rowid value of 2, we can do a binary search for that particular + row and output its corresponding y value. We show this graphically + as follows: +} +IMAGE direct1b.gif + +PARAGRAPH { + When doing a binary search, we only have to look at a number of + rows with is proportional to the logorithm of the number of entries + in the table. For a table with just 5 entires as in the example above, + the difference between a full table scan and a binary search is + negligible. In fact, the full table scan might be faster. But in + a database that has 5 million rows, a binary search will be able to + find the desired row in only about 23 tries, whereas the full table + scan will need to look at all 5 million rows. So the binary search + is about 200,000 times faster in that case. +} +PARAGRAPH { + A 200,000-fold speed improvement is huge. So we always want to do + a binary search rather than a full table scan when we can. +} +PARAGRAPH { + The problem with a binary search is that the it only works if the + fields you are search for are in sorted order. So we can do a binary + search when looking up the rowid because the rows of the table are + sorted by rowid. But we cannot use a binary search when looking up + x because the values in the x column are in no particular order. +} +PARAGRAPH { + The way to work around this problem and to permit binary searching on + fields like x is to provide an index. + An index is another b-tree. + But in the index b-tree the key is not the rowid but rather the field + or fields being indexed followed by the rowid. + The data in an index b-tree is empty - it is not needed or used. + The following diagram shows an index on the x field of our example table: +} +IMAGE index-ex1-x-b.gif + +PARAGRAPH { + An important point to note in the index are that they keys of the + b-tree are in sorted order. (Recall that NULL values in SQLite sort + first, followed by numeric values in numerical order, then strings, and + finally BLOBs.) This is the property that will allow use to do a + binary search for the field x. The rowid is also included in every + key for two reasons. First, by including the rowid we guarantee that + every key will be unique. And second, the rowid will be used to look + up the actual table entry after doing the binary search. Finally, note + that the data portion of the index b-tree serves no purpose and is thus + kept empty to save space in the disk file. +} +PARAGRAPH { + Remember what the original query example looked like: +} +CODE { + SELECT y FROM ex1 WHERE x=456; +} + +PARAGRAPH { + The first time this query was encountered we had to do a full table + scan. But now that we have an index on x, we can do a binary search + on that index for the entry where x==456. Then from that entry we + can find the rowid value and use the rowid to look up the corresponding + entry in the original table. From the entry in the original table, + we can find the value y and return it as our result. The following + diagram shows this process graphically: +} +IMAGE indirect1b1.gif + +PARAGRAPH { + With the index, we are able to look up an entry based on the value of + x after visiting only a logorithmic number of b-tree entries. Unlike + the case where we were searching using rowid, we have to do two binary + searches for each output row. But for a 5-million row table, that is + still only 46 searches instead of 5 million for a 100,000-fold speedup. +} + +HEADING 3 {Parsing The WHERE Clause} + + + +# parsing the where clause +# rowid lookup +# index lookup +# index lookup without the table +# how an index is chosen +# joins +# join reordering +# order by using an index +# group by using an index +# OR -> IN optimization +# Bitmap indices +# LIKE and GLOB optimization +# subquery flattening +# MIN and MAX optimizations diff --git a/www/table-ex1b2.gif b/www/table-ex1b2.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f68e0a9d2546455cfce06cd0dc5cf5d8c081e8f GIT binary patch literal 10888 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