数据库中的两个表连接起来,只用某一个表的字段设置条件,速度没问题。如果查询条件涉及到两个表中的字段,速度就很慢。我查询条件用的是LIKE 。
例如:
A表:id 单位B表:id 单位id 人员姓名 年龄 住址
我把两个表连接起来,查询 住址在 某条路上的人员 用的是 like 速度不是很慢。如果加条件,查询某个单位的住址在某个区域的人员,速度就很慢。
有大虾在吗????
例如:
A表:id 单位B表:id 单位id 人员姓名 年龄 住址
我把两个表连接起来,查询 住址在 某条路上的人员 用的是 like 速度不是很慢。如果加条件,查询某个单位的住址在某个区域的人员,速度就很慢。
有大虾在吗????
有大哥们知道怎么回事吗???
很急!!!!
like 的话如果用‘人员%’ 可以用到索引
如果是 ‘%人员%’就全表扫描了,
SELECT *
FROM 车辆档案 INNER JOIN
业户档案 ON 车辆档案.业户id = 业户档案.id INNER JOIN
m_管理单位 ON 业户档案.单位id = m_单位.id
WHERE (车辆档案.车号 LIKE '%8787%')如果只是简单的象上边的查询,速度不慢。可是如果再加一个条件的话就很慢了。SELECT *
FROM 车辆档案 INNER JOIN
业户档案 ON 车辆档案.业户id = 业户档案.id INNER JOIN
m_单位 ON 业户档案.单位id = m_单位.id
WHERE (车辆档案.车号 LIKE '%8787%') AND (m_单位.id = 23)
这样就很慢了。
三个表的对应关系是
车辆档案中的 业户id 对应 业户档案中的 id ,业户档案中的 单位id 对应 m_单位 中的 id.
FROM 车辆档案 INNER JOIN
业户档案 ON 车辆档案.业户id = 业户档案.id INNER JOIN
m_单位 ON 业户档案.单位id = m_单位.id and m_单位.id = 23
WHERE (车辆档案.车号 LIKE '%8787%') 试试,
哥哥,速度没提高,反而比以前的慢了。
SELECT *
FROM 车辆档案 INNER JOIN
业户档案 ON 车辆档案.业户id = 业户档案.id INNER JOIN
m_单位 ON 业户档案.单位id = m_单位.id and m_单位.id = 23 ) A
WHERE (A.车号 LIKE '%8787%') 试试,
INNER JOIN 业户档案 ON 车辆档案.业户id = 业户档案.id
INNER JOIN m_单位 ON 业户档案.单位id = m_单位.id
WHERE 业户档案.单位id = 23 AND 车辆档案.车号 LIKE '%8787%'
FROM 车辆档案 INNER JOIN
业户档案 ON 车辆档案.业户id = 业户档案.id INNER JOIN
(select * from m_管理单位 where id=23) m_单位 ON 业户档案.单位id = m_单位.id
WHERE (车辆档案.车号 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)