舉個例子說明,兩張表:一張表是員工表,欄位:員工號(主鍵),員工姓名,員工年齡。
另一張表是工資表: 欄位:員工號,月份(兩個欄位的復合主鍵),工資
如果兩張表都是百萬資料量,問:如何實作不用sql的left join 而是分別查詢兩張表,實作查找年齡大于20,工資大于5K的查找
uj5u.com熱心網友回復:
樓主的意思是否想用程式實作兩個表的關聯查詢?那可以考慮創建兩個執行緒,分別進行查詢。然后使用信號量進行同步,一個執行緒等待另一個執行緒查詢完畢,使用程式代碼的比較功能,實作關聯查詢。
uj5u.com熱心網友回復:
抱歉,我沒說清楚,另外還需要分頁顯示,以一個表為主表,這個問題我看來好像無解,只能用LEFT JOIN ,我想很多公司都不允許用關聯查詢,那他們遇到類似問題怎么解決
uj5u.com熱心網友回復:
select a.員工姓名,a.年齡,(select 工資 from 工資表 where 員工號=a.員工號) as 薪資
from 員工表 a
where a.年齡>20 and a.員工號 in (select b.員工號 from 工資表 b where b.工資>5k;)
樓主的資料表應該是拆分了的吧
uj5u.com熱心網友回復:
嗯。。。。我詳細說下吧:
先說你給的這個sql,問題在與in 里面的資料可能會太大了,幾十上百萬都有可能,所以這條sql 還是不能徹底解決問題
再說具體情況
其實是這樣的,實際資料表的情況和我舉的例子有差別,但舉的例子基本可以說明問題
就是我在使用pagehelper插件的時候發現 插件自動count了資料總條數,但自動count的時候如果存在左關聯其它表的情況,主表20萬條資料,左表40多萬條資料就有2s 的查詢時間了,這肯定很過分。
我先想的是,拆分sql 不用左關聯查詢,但是存在類似題目上給的查詢條件。所以拆分sql 解決不了
后來一直找問題解決辦法,發現pagehelper 的5.0.4版本可以自己手寫count 了,所以寫了個sql 再存在如題類似條件下 再進行左關聯。
這是折中解決問題了
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/86718.html
標籤:MySQL
上一篇:mysql 存盤程序的問題
