56,679
社区成员
发帖
与我相关
我的任务
分享
SELECT t.*,c.*,d.*,p.*,s.*,m.* FROM TESTDATABEAN t,CARDBEAN c,DEVICEBEAN d ,PERSONBEAN p, SAMPLEBEAN s, MANAGERBEAN m WHERE t.CID=c.ID AND d.ID=t.DID
AND p.ID=t.TESTER_ID AND s.ID=t.SAMPLE_ID AND m.ACCOUNT=t.MANAGERACCOUNT LIMIT 1000000,50
select * from a inner join (select * from b where id = 1) as b on a.id = b.id
select * from a inner join b on a.id = b.id where b.id=1
假设a,b都有10条 那么产生的笛卡尔积在粗略算下 10*10 再过滤 a表的10条 * b表的10条
使用子查询 select * from a inner join (select * from b where id = 1) on a.id = b.id
首先 假设select * from b where id = 1过滤过b表以后剩下5条 那么粗略算笛卡尔积为 a表的10条*b表过滤后的5条再过滤 当下减少了不少
第二 关于select t.*,c.*,d.*,p.*,s.*,m.*这样的查询方法本身就有问题 *代表所有字段 而这所有字段并非是你能全部用到的 只查询自己所需的字段是个好习惯
第三
explain SELECT t.*,c.*,d.*,p.*,s.*,m.* FROM TESTDATABEAN t,CARDBEAN c,DEVICEBEAN d ,PERSONBEAN p, SAMPLEBEAN s, MANAGERBEAN m WHERE t.CID=c.ID AND d.ID=t.DID
AND p.ID=t.TESTER_ID AND s.ID=t.SAMPLE_ID AND m.ACCOUNT=t.MANAGERACCOUNT LIMIT 1000000,50
执行下 看看你的索引情况