2017-08-16 59 views
0

我有兩個表工具tool_attribute。 工具具有12列和tool_attribute具有5.關於內部連接的sqlite優化,表值大約18K

信息我需要從表中:

  1. 工具 - REFID,串行,類型,識別符
  2. tool_attribute - 鍵,值,ID(有將這種多個條目)

現在,我有tool_attribute刀具圍繞18264和255696

當前查詢:

select 
    tool.refid, 
    tool.serial, 
    tool_attribute.value, 
tool.type 
from tool 
inner join tool_attribute 
    on tool.id = tool_attribute.id 
where 
    (tool_attribute.val LIKE '%t00%' or 
    tool.serial LIKE '%t00%') 
group by tool.refid 
order by tool.serial asc; 

這需要大約750毫秒是相當快的,但我想使它更快。我在低內存Windows 6.0設備上運行此代碼,因此需要太多時間。 有什麼辦法可以讓它變得更快?

+0

這是什麼't00'?如果它是一個重要的信息,它可能是值得把它放在自己的專欄。 –

+0

沒有它的只是一個示例文本。它可能會有所不同 – user3383301

回答

0

你可以嘗試加算指標,以參與加入列:

CREATE INDEX idx_tool ON tool (id); 
CREATE INDEX idx_tool_attr ON tool_attribute (id); 

WHERE子句LIKE條件將排除使用所涉及的列的索引的任何機會,我想。原因是LIKE表達式%something消除了搜索B樹的機會,該B樹使用從左到右的後綴來查找某些內容。如果你可以使用類似於LIKE 'something%'的東西改寫你的WHERE邏輯,那麼也可以在那裏使用索引。

+0

問題是我不能使用索引。 tool_attribute上的id將具有重複值。 – user3383301

+0

@ user3383301您仍然可以在具有重複值的列上使用索引。只要你的基數不低,你應該沒問題。 –