條目表格包含以下列:id,漢字,假名,含義,化合物。該表具有以下DDL:SQLite。如何優化SELECT子查詢?
CREATE TABLE entry (
id INTEGER PRIMARY KEY,
kanji TEXT,
kana TEXT,
meaning TEXT,
compounds BLOB);
我想更新列化合物。此列包含與此條目相似的條目的ID。隨着更新,我沒有問題。我需要使用SELECT子查詢來優化SQL查詢。它非常慢(每個查詢1020毫秒)。 實施例:
SELECT GROUP_CONCAT(ent_com.id) AS comps FROM
(
SELECT * FROM entry
WHERE
(kanji LIKE '斯う%' OR kanji LIKE '%斯う}' OR kanji LIKE '%{斯う')
AND
(kana LIKE 'こう%' OR kana LIKE '%こう}' OR kana LIKE '%{こう')
AND id!=1004310
)
ent_com
ORDER BY length(ent_com.[kanji]),length(ent_com.[kana])
漢字(象形文字)和假名(日文平假名和片假名字母)詞語開始與 '{',結尾 '}'。我正在使用JDBC庫來連接SQLite。
SELECT GROUP_CONCAT(ent_com.id) AS comps FROM
(
SELECT * FROM entry
WHERE
(kanji LIKE ? OR kanji LIKE ? OR kanji LIKE ?)
AND
(kana LIKE ? OR kana LIKE ? OR kana LIKE ?)
AND id!=?
)
ent_com
ORDER BY length(ent_com.[kanji]),length(ent_com.[kana])
選擇:
c.setAutoCommit(false);
preparedStatementSelect = null;
preparedStatementSelect = c.prepareStatement(sql_select_entry);
preparedStatementSelect.setString(1, entry.getKeb_list().get(0)
+ "%");
preparedStatementSelect.setString(2,
"%" + entry.getKeb_list().get(0) + "}");
preparedStatementSelect.setString(3, "%{"
+ entry.getKeb_list().get(0));
preparedStatementSelect.setString(4, entry.getReb_list().get(0)
+ "%");
preparedStatementSelect.setString(5,
"%" + entry.getReb_list().get(0) + "}");
preparedStatementSelect.setString(6, "%{"
+ entry.getReb_list().get(0) + "%");
preparedStatementSelect.setString(7, entry.getEnt_seq());
ResultSet rs = preparedStatementSelect.executeQuery();
如何優化選擇子查詢,使其更快?
'kanji' /'kana'列有索引嗎? – 2015-02-09 08:01:33
漢字和假名列上沒有索引。只有'id'列是主鍵。 – 2015-02-09 08:04:07
單詞邊界搜索不能使用任何內置機制進行優化。 (並且示例查詢與代碼不匹配。) – 2015-02-09 08:29:55