[evolution-data-server/openismus-work] Bug 699597 - Autocomplete using GAL is slow
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/openismus-work] Bug 699597 - Autocomplete using GAL is slow
- Date: Mon, 27 May 2013 13:37:16 +0000 (UTC)
commit b209d91e7e4e715bd3c7114989bda373f0b0e928
Author: David Woodhouse <David Woodhouse intel com>
Date: Mon May 20 14:14:24 2013 +0100
Bug 699597 - Autocomplete using GAL is slow
With large addressbooks, using an inner join which produces hundreds of
thousands of duplicate results, and then filtering them back down to what
we really wanted with 'DISTINCT' is really inefficient. I can't even tell
you *how* inefficient, because it didn't complete a single query in the
hours that I left it running. Switch it to a more sensible outer join and
it completes in a second or so on my 216000-entry address book.
.../libedata-book/e-book-backend-sqlitedb.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
---
diff --git a/addressbook/libedata-book/e-book-backend-sqlitedb.c
b/addressbook/libedata-book/e-book-backend-sqlitedb.c
index da9911c..7ade413 100644
--- a/addressbook/libedata-book/e-book-backend-sqlitedb.c
+++ b/addressbook/libedata-book/e-book-backend-sqlitedb.c
@@ -3616,7 +3616,7 @@ convert_match_exp (struct _ESExp *f,
if (is_list) {
gchar *tmp;
- tmp = sqlite3_mprintf ("summary.uid = multi.uid AND multi.field =
%Q", field);
+ tmp = sqlite3_mprintf ("multi.field = %Q", field);
str = g_strdup_printf (
"(%s AND (%s %s %s%s))",
tmp, field_name, oper, query_term,
@@ -3833,7 +3833,8 @@ book_backend_sqlitedb_search_query (EBookBackendSqliteDB *ebsdb,
gchar *list_table = g_strconcat (folderid, "_lists", NULL);
stmt = sqlite3_mprintf (
- "%s FROM %Q AS summary, %Q AS multi WHERE %s",
+ "%s FROM %Q AS summary "
+ "LEFT OUTER JOIN %Q AS multi ON summary.uid = multi.uid WHERE %s",
select_portion, folderid, list_table, sql);
g_free (list_table);
} else {
@@ -3866,8 +3867,8 @@ book_backend_sqlitedb_search_query (EBookBackendSqliteDB *ebsdb,
gchar *list_table = g_strconcat (folderid, "_lists", NULL);
stmt = sqlite3_mprintf (
- "SELECT DISTINCT summary.uid, vcard, bdata "
- "FROM %Q AS summary, %Q AS multi WHERE %s",
+ "SELECT DISTINCT summary.uid, vcard, bdata FROM %Q AS summary "
+ "LEFT OUTER JOIN %Q AS multi ON summary.uid = multi.uid WHERE %s",
folderid, list_table, sql);
g_free (list_table);
} else {
@@ -4126,7 +4127,8 @@ e_book_backend_sqlitedb_search_uids (EBookBackendSqliteDB *ebsdb,
gchar *list_table = g_strconcat (folderid, "_lists", NULL);
stmt = sqlite3_mprintf (
- "SELECT DISTINCT summary.uid FROM %Q AS summary, %Q AS multi WHERE
%s",
+ "SELECT DISTINCT summary.uid FROM %Q AS summary "
+ "LEFT OUTER JOIN %Q AS multi ON summary.uid = multi.uid WHERE %s",
folderid, list_table, sql_query);
g_free (list_table);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]