您将如何优化此mysql查询?

您将如何优化此mysql查询?,mysql,Mysql,有谁能帮助我优化此查询: SELECT DISTINCT A.X1, A.X2 FROM TABLEAA A JOIN TABLEBB B ON A.Y = B.Y AND B.Z1='SELECTED1' AND B.W NOT LIKE 'SLECTED3' JOIN TABLECC C ON A.Y = C.Y AND C.Z2='SELECTED2' AND A.W NOT LIKE 'SLECTED3' 鉴于 表AA:100万份参赛作品 表B:1700万份参赛作品

有谁能帮助我优化此查询:

SELECT DISTINCT
A.X1,      
A.X2   
FROM TABLEAA A
JOIN TABLEBB B ON A.Y = B.Y AND B.Z1='SELECTED1' AND B.W NOT LIKE 'SLECTED3'
JOIN TABLECC C ON A.Y = C.Y AND C.Z2='SELECTED2'
AND A.W NOT LIKE 'SLECTED3'
鉴于

表AA:100万份参赛作品 表B:1700万份参赛作品 表CC:120万份参赛作品

它可以工作,但几乎需要8到10秒

还有其他的方法写这个吗

编辑:表格BB上的主要索引是B.Z1和B.Y的组合。表格CC上的主要索引是C.Z2和C.Y的组合。表格AA上的主要索引是A.Y

我希望这样更好

SELECT DISTINCT A.X1, A.X2   
FROM TABLEAA AS A
INNER JOIN(TABLEBB AS B)
   ON(A.Y = B.Y)
INNER JOIN(TABLECC AS C)
   ON(A.Y = C.Y)
WHERE B.Z1 = 'SELECTED1' AND
      B.W NOT LIKE '%SLECTED3%' AND
      C.Z2='SELECTED2' AND
      A.W NOT LIKE '%SLECTED3%'

对查询运行
explain
将显示缺少的索引。表上的索引是什么?
B.Z1='SELECTED1'
不像'SLECTED3'
-我不知道你到底在做什么,但这闻起来像是一个糟糕的架构设计。@Kickstart;TableBB上的主索引是B.Z1和B.Y的组合。TableCC上的主索引是C.Z2和C.Y的组合。TableAA上的主索引是A.Y。
说明了什么
输出?这可能要慢得多,因为B.W和A.W上的前导通配符将使这些列上的索引无效。如果没有通配符,它应该与原始查询没有什么不同。