Оптимальный способ объединения трех таблиц в SQLite

База данных интернет-закладок (упрощенная). Я подумал, что имеет смысл организовать таблицы логически, например:

Bookmarks (id, title, url; basically external data)
+------+------------+-----+
| suid |   Title    | ... |
+------+------------+-----+

User (user-specific data: favorites, ratings, etc)
+------+------------+-----+
| suid | IsFavorite | ... |
+      +  (0 or 1)  +     +
+------+------------+-----+

History (last used, use count etc)
+------+------------+-----+
| suid |  LastUsed  | ... |
+      +(TDateTime) +     +
+------+------------+-----+

('suid' - уникальный идентификатор, целочисленный первичный ключ)

Из закладок, отмеченных как избранное Мне нужно выбрать N последний раз использовался (для заполнения меню во время выполнения для удобства).

SELECT Bookmarks.suid, Title from Bookmarks
    INNER JOIN User USING (suid)
    INNER JOIN History USING (suid)
    WHERE IsFavorite = 1
    ORDER BY LastUsed DESC
    LIMIT 15;

Этот оператор работает и кажется достаточно читаемым, но оптимален ли он? Таблица закладок предназначена в среднем для хранения 20-50 тыс. Записей (то есть не в стандартном диспетчере закладок браузера :-) При запуске приложение выполнит 3 или 4 аналогичных оператора для заполнения элементов управления. Все поля, используемые в примере, проиндексированы.

Я обучаю себя SQL и придумал приведенный выше код, но, может быть, я упускаю из виду синтаксис или идиому, которые могли бы его улучшить?

8
задан OMG Ponies 10 November 2010 в 17:20
поделиться