aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mandocdb.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-04-16 18:59:43 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-04-16 18:59:43 +0000
commita63a6bea52c160a0ae3a17b7dd4931b76f84e5bd (patch)
treed2bc193b7751bde58e3524649bd233e2105b46bd /mandocdb.c
parent82295da1cbb8b8780637173094f99de1b14bb2e9 (diff)
downloadmandoc-a63a6bea52c160a0ae3a17b7dd4931b76f84e5bd.tar.gz
mandoc-a63a6bea52c160a0ae3a17b7dd4931b76f84e5bd.tar.zst
mandoc-a63a6bea52c160a0ae3a17b7dd4931b76f84e5bd.zip
Give the mlinks and keys tables a pageid index,
as suggested by jeremy@ and espie@. The mlinks index speeds up basic apropos(1) searches by around 30% because it speeds up the final SELECT FROM mlinks query by about 95%. For large result sets, the overall speedup gets even larger, in the extreme case of "apropos Nd~." bymore than 90%. The keys index finally makes the apropos(1) -O option usable: It no longer incurs relevant extra cost, while in the past it was embarrassingly slow. This comes at a cost: Total database build times grow by about 5%, and each index adds about 10% database size with -Q. I consider that acceptable in view of the huge apropos(1) performance gains. The -Q database for /usr/share/man still remains below 1 MB.
Diffstat (limited to 'mandocdb.c')
-rw-r--r--mandocdb.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/mandocdb.c b/mandocdb.c
index 71f67006..8ad91953 100644
--- a/mandocdb.c
+++ b/mandocdb.c
@@ -1,4 +1,4 @@
-/* $Id: mandocdb.c,v 1.135 2014/04/13 22:03:04 schwarze Exp $ */
+/* $Id: mandocdb.c,v 1.136 2014/04/16 18:59:43 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -2182,6 +2182,7 @@ create_tables:
" \"pageid\" INTEGER NOT NULL REFERENCES mpages(id) "
"ON DELETE CASCADE\n"
");\n"
+ "CREATE INDEX mlinks_pageid_idx ON mlinks (pageid);\n"
"\n"
"CREATE TABLE \"names\" (\n"
" \"bits\" INTEGER NOT NULL,\n"
@@ -2195,7 +2196,8 @@ create_tables:
" \"key\" TEXT NOT NULL,\n"
" \"pageid\" INTEGER NOT NULL REFERENCES mpages(id) "
"ON DELETE CASCADE\n"
- ");\n";
+ ");\n"
+ "CREATE INDEX keys_pageid_idx ON keys (pageid);\n";
if (SQLITE_OK != sqlite3_exec(db, sql, NULL, NULL, NULL)) {
exitcode = (int)MANDOCLEVEL_SYSERR;