mysql反查優化記錄

2021-09-24 11:21:50 字數 798 閱讀 3627

id

name

source

1客戶1

a渠道2

客戶1b渠道

3客戶2

a渠道4

客戶3a渠道

5客戶1

c渠道我現在的邏輯是根據傳進來的id查詢name,然後再根據name來查詢id;例如:傳進來id是1和3,根據這兩個id查到name值為客戶1和客戶2,然後根據這兩個name去查詢id,可得到1,2,3,5,翻譯成sql就是下面的。

select id,name from customer where name in(select name from customer where id in(1,3));
現在有十萬客戶,這裡面大概有1200左右的重複客戶,有沒有什麼比較好的辦法優化?傳進來的id特別多,大概四萬個id,所以執行起來很慢。現在id和name已經做了索引。

此問題記錄一下,我現在正在找好的解決方案,出現這個問題的原因是,多個系統迭代,對接,遺留的老問題。改動原始資料的話,影響頗大!

解決方法不限制,可以redis之類的外部快取。

解決辦法:

select id,name from customer c1 left

join customer c2 on c1.name=c2.name where c1.id in(1

,3);

mysql各種join方法:

mysql優化記錄

一.建立索引 索引的分類 1.新增primary key 主鍵索引 alter tabletable nameadd primary key column 2.新增unique 唯一索引 alter tabletable nameadd unique column 3.新增index 普通索引 寫法...

mysql中反查 MySql反向模糊查詢

平時開發中,常用一些模糊查詢,例如查詢 user中uname包含 塔 的資料,可以使用如下三種方式 select from user where uname like 塔 select from user where instr uname,塔 select from user where loca...

mysql使用優化記錄

使用in語句,in的列表明確並且有限時,可以使用。因為此時搜尋引擎會使用索引,但in的是乙個查詢結果時,索引將會沒有作用,會查詢全表。例子 使用in查詢時,in的列表有限且明確 select from on auction where pid in 10,11,20 此時的執行計畫,會使用建立在pi...