日期:2014-05-17  浏览次数:20806 次

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