查询速度问题???
数据库中的两个表连接起来,只用某一个表的字段设置条件,速度没问题。如果查询条件涉及到两个表中的字段,速度就很慢。我查询条件用的是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)