0xbad1d3a5 / Kaku

画 - Japanese OCR Dictionary
https://kaku.fuwafuwa.ca/
BSD 3-Clause "New" or "Revised" License
203 stars 36 forks source link

DB access is slow #1

Closed 0xbad1d3a5 closed 7 years ago

0xbad1d3a5 commented 7 years ago

Might be able to use native SQLite to speed it up? Some untested SQLite code:

SELECT result.fkEntry_id, result.kanji_id, result.kanji, result.reading_id, result.reading, result.meaning_id, result.meaninggloss_id, result.gloss, result.readingrestriction_id, result.readingRestriction, meaningkanjirestriction.id AS meaningkanjirestriction_id, meaningkanjirestriction.kanjiRestriction
FROM (SELECT result.fkEntry_id, result.kanji_id, result.kanji, result.reading_id, result.reading, result.meaning_id, result.meaninggloss_id, result.gloss, readingrestriction.id AS readingrestriction_id, readingrestriction.readingRestriction
      FROM (SELECT result.fkEntry_id, result.kanji_id, result.kanji, result.reading_id, result.reading, result.meaning_id, meaninggloss.id AS meaninggloss_id, meaninggloss.gloss
            FROM (SELECT result.fkEntry_id, result.kanji_id, result.kanji, reading.id AS reading_id, reading.reading, result.meaning_id
                  FROM (SELECT kanji.fkEntry_id, kanji.id AS kanji_id, kanji.kanji, meaning.id AS meaning_id
                        FROM kanji
                        INNER JOIN meaning ON kanji.fkEntry_id = meaning.fkEntry_id
                        WHERE kanji.kanji LIKE '%') AS result
                  INNER JOIN reading ON reading.fkEntry_id = result.fkEntry_id) AS result
            INNER JOIN meaninggloss ON result.meaning_id = meaninggloss.fkMeaning_id
            GROUP BY meaninggloss_id) AS result
      LEFT JOIN readingrestriction ON result.reading_id = readingrestriction.fkReading_id) AS result
LEFT JOIN meaningkanjirestriction ON result.meaning_id = meaningkanjirestriction.fkMeaning_id
ORDER BY meaning_id
tandasima commented 7 years ago

what does the db schema look like for this app?

0xbad1d3a5 commented 7 years ago

The DB schema is generated from OrmLite models that are defined here: https://github.com/Xyresic/Kaku/tree/master/app/src/main/java/ca/fuwafuwa/kaku/Database/JmDictDatabase/Models

0xbad1d3a5 commented 7 years ago

Fixed. Put frequently accessed data into a single table for faster access. Searches are taking ~250ms on average now.