1.1. 基础

1.1.1. 如何进行SQL优化

  1. 尽量避免全表扫描,多考虑where和obder by。
    • 避免where 中对null的判断,创建表时采用not null ,或赋予初始值
    • 避免where 中使用比较运算符
    • 避免where 中使用or
    • 慎用 in 和 not in
  2. 建表时考虑 索引。

1.1.2. SQL引擎

  1. InnoDB:支持事务、行级锁定、外键约束。
  2. MyISAM:不支持事务、不支持外键,但速度快、占用资源少。
  3. Memory:使用内存存储,响应极快。
  4. NDB:用于分布式集群。
  5. Archive:有很好的压缩性能,用于文件压缩、归档。

1.1.3. 数据库索引的原理与简介

1.1.4. 防止SQL注入

1.1.5. 数据库视图

1.1.6. 事务

1.1.7. 数据库模糊查询

1.1.8. 数据库左连接关键字

1.1.9. Sql注入是#还是?

  • #{}:为占位符,即sql预编译
  • ${}:为拼接符, 即字符串拼接

执行流程

  • 2. {}:动态解析 --> 预编译 --> 运行

  • ${}: 动态解析 --> 编译 -->运行

变量替换

  • 3. {}:变量替换是在DBMS(数据库管理系统)中,会对对应的变量自动加上''

  • ${}:变量替换实在DBMS外,不会对对应的变量加上''

sql注入

  • 4. {}可以防止sql注入

  • ${}不可以防止sql注入

4.1. B树和B+树

https://blog.csdn.net/v_JULY_v/article/details/6530142/

4.1.1. 为什么MySQL的索引要使用B+树而不是其它树形结构?比如B树?

因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致IO操作变多,查询性能变低;

4.1.2. b+树树高

InnoDB存储引擎默认一个数据页大小为16kb,非叶子节点存放(key,pointer),pointer为6个字节,key为4个字节,即非叶子节点能存放16kb/14左右的key,pointer,而叶子节点如果一条数据大小为100字节,那一个叶子节点大约可存放160条数据。

如果高度为3,则可存放数据为:16kb/14 16kb/14 160大约1亿多数据。因此InnoDB存储引擎b+树的高度基本为2-3.

4.2. 面试题

例1 : 根据表查询两个表中查找,每个plan中amount最小的记录。

wu_plan表:

id Plan model Corp_code plannum prixis
1 00001 exx22 nokia 2000 0
2 00002 lc001 sony 3000 0

wu_born表:

id Plan pact amount
1 00001 Aa1 300
2 00001 Aa2 200
3 00001 Bb1 500
4 00002 Bb2 800
5 00002 Bb3 400

结果:

id Plan model Corp_code plannum prixis pact amount
1 00001 exx22 nokia 2000 0 Aa2 200
2 00002 lc001 sony 3000 0 Bb3 400

SELECT wu_plan.*, wu_born.pact, wu_born.amount from wu_plan, wu_born WHERE wu_plan.Plan = wu_born.Plan AND wu_born.amount = (SELECT min(amount) FROM wu_born WHERE Plan = wu_plan.Plan);

results matching ""

    No results matching ""