查询速度问题???
数据库中的两个表连接起来,只用某一个表的字段设置条件,速度没问题。如果查询条件涉及到两个表中的字段,速度就很慢。我查询条件用的是LIKE 。
例如:
A表:id    单位
B表:id    单位id   人员姓名   年龄    住址
我把两个表连接起来,查询  住址在  某条路上的人员  用的是 like  速度不是很慢。如果加条件,查询某个单位的住址在某个区域的人员,速度就很慢。
有大虾在吗????
------解决方案--------------------给出表结构,给出语句 ,给出数据量
like 的话如果用‘人员%’ 可以用到索引
如果是 ‘%人员%’就全表扫描了,
------解决方案--------------------SELECT   *  
FROM   车辆档案   INNER   JOIN  
           业户档案   ON   车辆档案.业户id   =   业户档案.id   INNER   JOIN  
           m_单位   ON   业户档案.单位id   =   m_单位.id  and  m_单位.id   =   23
WHERE   (车辆档案.车号   LIKE   '%8787%') 
试试,
------解决方案--------------------把你的 执行计划贴上来阿
把select * 后面的 * 换成实际的列名
查看你的索引,是不在条件列上都有索引阿,如果有,加上提示 (使用索引合并)可以提高效率
------解决方案--------------------SELECT * FROM (
SELECT *  
FROM 车辆档案 INNER JOIN  
业户档案 ON 车辆档案.业户id = 业户档案.id INNER JOIN  
m_单位 ON 业户档案.单位id = m_单位.id and m_单位.id = 23 ) A
WHERE (A.车号 LIKE '%8787%')    
试试,
------解决方案--------------------SQL code
SELECT * FROM 车辆档案 
INNER JOIN 业户档案 ON 车辆档案.业户id = 业户档案.id 
INNER JOIN m_单位 ON 业户档案.单位id = m_单位.id 
WHERE 业户档案.单位id = 23 AND 车辆档案.车号 LIKE '%8787%'
------解决方案--------------------
还要注意驱动表的选择:
join连接中一个有驱动表,另一个表为inner table,驱动表中的每一行与inner表中的相应记录JOIN。类似一个嵌套的循环。适用于驱动表的记录集比较小,而且inner表需要有有效的访问方法(Index)。需要注意的是:JOIN的顺序很重要,驱动表的记录集一定要小,返回结果集的响应时间是最快的。
你看看那个表的记录数比较少,就让它作为驱动表,然后再选择返回记录比较少的连接放在前面.不知道你建立索引了没有,如果没创建,再怎么优化也快不了多少.
以下语句 车辆档案 是驱动表:
SELECT   *  
FROM   车辆档案   INNER   JOIN  
           业户档案   ON   车辆档案.业户id   =   业户档案.id   INNER   JOIN  
           m_单位   ON   业户档案.单位id   =   m_单位.id  
WHERE   (车辆档案.车号   LIKE   '%8787%')   AND   (m_单位.id   =   23)