MySql多表查询——复杂查询

一.select语句基本查询结构;

    

1.执行顺序;

   (1).首先执行where语句过滤原始数据

   (2).执行group by进行分组

   (3).执行having对分组数据进行操作

   (4).执行select筛选出数据

   (5). 执行order by排序

  2.Sql优化问题(先简单了解,后续再详解);

    

当你数据库有100万条数据的时候怎么优化SQL语句

①. 不要有超过5个以上的表连接(连接的表越多,其编译的时间和连接的开销也越大,性能越不好控制,最好是把连接拆开成较小的几个部分逐个顺序执行)

②. 考虑使用临时表或表变量存放中间结果

③. 修改like程序,去掉前置百分号,like语句因为前置百分号而无法使用索引,会导致全表扫描

④. 限制结果集,要尽量减少返回的结果行,包括行数和字段列数

⑤. 使用存储过程封装复杂的SQL语句或商业逻辑,因为存储过程的执行计划可以被缓存在内存中较长时间,减少了重新编译的时间,还有存储过程可以减少客户端和服务器的频繁交互。

⑥. 尽量避免在where子句中使用!=或<>操作符,否则会进行全表扫描,应避免全表扫描,考虑在where及order by设计的列上建立索引

⑦. 尽量避免在where子句中对字段进行null值判断,否则会进行全表扫描,例如select id from person where num is null,可以在num上设置默认值0,确保表中num列没有null列,然后使用查询:select id from person where num=0

⑧. 尽量避免在where子句中使用or来连接条件,否则会进行全表扫描,例如select id from person where num=05 or num=22,优化后:select id from person where num=05 union all select id from person where num=22

 二.连接查询

   2.1数据的完整性约束;

          主键:主键是关系表中记录的唯一标识。主键的选取非常重要,主键不要带有业务含义, 而应该使用BIGINT自增或者GUID类型。主键也不应该允许NULL。可以使用多个列 作为联合主键,但联合主键并不常用。

          外键:外键主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字 段为外键字段,那么该字段的值必须来源于参照的表的主键。

  2.2.实体间的关系

   2.2.1 一对一关系(1:1):一张表里面的数据与另外一张表的数据是一对一的;

       如下表:基本满足咱们的要求,其中姓名、性别和年龄属于常用数据,但是身高、体重、籍贯和居住地为不常用数据。如果每次查询都要查询所有数据的话,那么不常用数据就会影响效率,而且又不常用。

        因此,咱们可以将常用的数据和不常用的数据分离存储,即分为两张表,例如:

        

表1:常用数据

表2:不常用数据

 现在表1表2所示,通过字段ID表1中的一条记录只能匹配表2中的一条记录,反之亦然,这就是一对一</

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值