select count(1) from B b inner join A a on a.id = b.personid where b.code like '32%'
这样试试呢 ######select count(1) from B b inner join A a on a.id = b.personid where b.code in(select code from xxx ); 这样 先把江苏的code查出来,用in试试######看看!######效果一般。。。还是十几秒######为啥要关联A表? ######回复
@huan : 走了索引,然而还是很慢。。。感觉有点无解######回复
@程序员Joe : 两个表的关联查询很简单,看看有没有走索引。除非改动表结构,否则再优化的空间很小。######我可能会加a表字段的一些查询条件,姓名年龄什么的######使用like语句就没有使用索引了。######回复
@says : 关于mysql索引,尽量减少like,但不是绝对不可用。 xxx% 是可以用到索引的,但 %xxx 是失效的。除了like,以下操作符也可用到索引:<,<=,=,>,>=,BETWEEN,IN。<>,not in ,!=则不启用索引######不是吧!######b.code有建索引吗?######
select count(1) from B b inner join A a on a.id = b.
personid where left(b.code,2) = '32'######效果不明显######
select count(distinct B.perosnid) from B left join (select id from A) AA on AA.id = B.personid where B.code like '32%'(比如查江苏省) 楼主你试试。这样应该快很多。 还有一种方式,如果表数据特别多。建议用union 按一个字段把表分区一样,然后用union
######木有卵用啊。。。感觉已经不是sql语句能优化的了的了######
SELECT COUNT(1) FROM B WHERE CODE like '32%'
--动态以下部分
AND PERSOINID IN (SELECT ID FROM A WHERE XXX)
动态一下试试吧 由于A->B是一对多 那么B其实就是所有的数据 只是由于查询需要A的参数 所以要关联到A 但是如果没有A的参数 其实直接查B就可以了 对不?
特殊情况特殊处理一下吧
######表分区呢######百万级的数据就分区了,我感觉有点扯啊######如果你要查询江苏全省的记录数,先把江苏区域编码整理出来用in在B表查询出
PERSOINID导入内存表,然后内存表全表和A表关联,看看性能是不是会好点。######
1.建议把code 分成多个字段,并加上索引. 别用like,
2.如果不join A表快的话,每页都单独取A的记录.