3
這裏的查詢,因爲它代表迄今:簡化查詢到案件
select `formeid`, `name`, 'm' as `gender` from `data_pokemon`
where `genders` not like '0|_' and `formeid` not in
(select `formeid` from `dex` where `userid`[email protected] and `gender`='m')
union
select `formeid`, `name`, 'f' as `gender` from `data_pokemon`
where `genders` not like '_|0' and `formeid` not in
(select `formeid` from `dex` where `userid`[email protected] and `gender`='f')
union
select `formeid`, `name`, 'n' as `gender` from `data_pokemon`
where `genders`='0|0' and `formeid` not in
(select `formeid` from `dex` where `userid`[email protected] and `gender`='n')
order by `formeid`
正如你可以看到,有很多重複的。有沒有什麼辦法來簡化這個查詢,所以沒有那麼多?
我明白了。這在索引使用方面的效率如何? –
@Kolink:'p.genders NOT LIKE'_ | 0''是唯一不能使用索引的位,但它也存在於原始查詢中;取決於你的數據結構,你可能可以改進它(例如把''f''性別作爲'CASE'表達式的ELSE'子句) - 否則你必須規範化該列。除此之外,'data_pokemon。(genders,formeid)'和'dex。(userid,gender,formeid)'的索引應該證明是非常有效的。 – eggyal