写SQL的日常心得
在数据量很庞大,但是返回的数据是分页(几十条)时,可以采用内连接(和自己连接,以主键为基础),这样可以提前过滤掉很多数据,然后再和其它的表连接,这样的就可以省去多余的连接了。
select`goods_spec`.`img_url`,`goods_spec`.`spec_no`,`goods_spec`.`spec_name`,`goods_goods`.`goods_no`,`goods_goods`.`goods_name`,`goods_spec`.`spec_id`,`goods_goods`.`brand_id`,`goods_goods`.`class_id`,`goods_spec`.`goods_id`from `goods_spec`join (select `goods_spec`.`spec_id`from `goods_spec`where (`goods_spec`.`spec_id` not in (1484616, 1484615, 1484669, 1000504, 1484727, 1484726, 1484725, 1484724,1484723, 1484722, 1484721, 1484720, 1484719, 1484718, 1484717, 1484716,1484715, 1484714, 1484713, 1484712, 1484711, 1484710, 1484709, 1484708)and `goods_spec`.`deleted` = 0)order by `goods_spec`.`spec_id` desclimit 50) as `alias_10041871`using (`spec_id`)left outer join `goods_goods`on `goods_spec`.`goods_id` = `goods_goods`.`goods_id`
这条sql中,把条件和分页都写内联的表中,查出来的数据只有50条。然后再通过查出来的这50条主键信息过滤掉别的数据,效率会提升很多。
减少不必要的字段。在数据量达到一个级别(10万条)多查一个字段,消耗的时间也是十分明显的(5s),因此避免查询不必的字段是十分必要的。(不查询字段只查询数据条数速度特别快!)。
