タイムアウトしないように、高度に最適化されたソリューションを必要とする SQL クエリを作成しています。しかし、次の SQL クエリを継続的に最適化する方法がわかりません。
select distinct j.job,f.path,p.path
from fixes f, jobs j, paths p where f.job=j.id and p.id =f.path
and (p.path like '//Tools/Web/%' or p.path = '//Tools/Web');
次のフィールド (基本的にすべて) にインデックスを作成しました。
- ジョブID
- ジョブ.ジョブ
- パス.パス
- パス.id
- 修正.ジョブ
- fix.path
「fixes」、「jobs」、「paths」テーブルのそれぞれに最大 50,000 行あり、現在のタイムアウトは 6 分です
「explain」コマンドは次の情報を表示します。解読してみてください
1 SIMPLE j index PRIMARY job 62 (null) 73226 Using index; Using temporary
1 SIMPLE f ref path,job job 8 j.id 825
1 SIMPLE p eq_ref PRIMARY,path PRIMARY 8 f.path 1 Using where
「パス」テーブルのテーブル作成ステートメント:
CREATE TABLE `paths` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`path` varchar(250) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `path` (`path`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;