0

maskedindextable と dictionarytable の 2 つのテーブルがあります。

Dictionarytable には 4 つの列があります。

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 には 4 つの列があります。

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 に対応します。暗号化された単語が EAD64zef6z である、対応する maskedindexencryptedvalue を見つけたいと考えています。現在、次のクエリを使用しています。

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 秒かかります)。クエリを最適化する方法を知っている人はいますか?

4

4 に答える 4

1

私の経験では、クエリが遅いときはいつでも、WHERE 句で言及されている列にインデックスがないことがわかります。

WHERE 句に表示されるすべての列にインデックスを付けてみてください。

于 2013-04-08T16:38:21.500 に答える