我有兩個表:maskedindextable和dictionarytable。如何優化以下查詢?
的dictionarytable有四列:
ID (primary key)
filelocation
dictionaryEncryptedIndex
dictionaryEncryptedWord
和價值觀是這樣的:
ID | filelocation | dictionaryencryptedindex | dictionaryEncryptedWord
0 | c:/test.txt | 0x01 | EAD64zef6z
1 | c:/test.txt | 0x02 | 5ez4f
2 | c:/test.txt | 0x03 | ze654f
3 | c:/john.txt | 0x01 | 6ze5f4
4 | c:/john.txt | 0x02 | ze5f68z4f
5 | c:/john.txt | 0x03 | EAD64zef6z
6 | c:/smith.txt | 0x01 | er6g4
7 | c:/smith.txt | 0x02 | z6e58g4
8 | c:/smith.txt | 0x03 | a64zef6z
9 | c:/laura.txt | 0x01 | EAD64zef6z
這個表有700個000值
的maskedindextable有四列:
ID (primary key)
filelocation
maskedIndexEncryptedIndex
maskedIndexEncryptedValue
個值是這樣的:
ID | filelocation | maskedIndexEncryptedIndex | maskedIndexEncryptedValue
0 | c:/test.txt | 0x01 | 5z1ef
1 | c:/test.txt | 0x02 | e6rh546er4g
2 | c:/test.txt | 0x03 | z6ef548ezf
3 | c:/john.txt | 0x01 | (y48try68
4 | c:/john.txt | 0x02 | iu47k
5 | c:/john.txt | 0x03 | 6tkj
6 | c:/smith.txt | 0x01 | 6ez5r48
7 | c:/smith.txt | 0x02 | 6i5
8 | c:/smith.txt | 0x03 | 6e5rg
9 | c:/laura.txt | 0x01 | ze654f
此表還具有700個000值
表dictionarytable的dictionaryencryptedindex & filelocation結合表maskedindextable的maskedIndexEncryptedIndex & filelocation對應。 我想找到相應的maskedindexencryptedvalue,加密的單詞是EAD64zef6z。目前我使用以下查詢:
SELECT DISTINCT MaskedIndexTable.filelocation,
dictionaryencryptedindex,
maskedindexencryptedvalue
FROM MaskedIndexTable
INNER JOIN DictionaryTable
ON MaskedIndexTable.maskedIndexEncryptedIndex =
DictionaryTable.dictionaryEncryptedIndex
WHERE MaskedIndexTable.Id IN
(SELECT DictionaryTable.Id
FROM DictionaryTable
WHERE `dictionaryEncryptedWord` LIKE 'EAD64zef6z')
AND `dictionaryEncryptedWord` LIKE 'EAD64zef6z';
但是,此查詢運行速度非常慢(需要3秒鐘)。有誰知道我可以如何優化我的查詢?
索引,根據Marjeta的回答可能是最好的選擇。另外,在每一個有點幫助的部門中,你都使用LIKE而沒有通配符。使用=可能會使你獲得納秒或者兩個納秒。 – 2013-04-08 16:45:44
大多數數據庫引擎提供了一種檢查查詢計劃的方法,以確定查詢的哪個部分導致性能問題(例如缺少索引)。雖然在這種情況下,我懷疑這是你的子選擇,而不是缺失的索引。 – RickF 2013-04-08 17:02:56