0%

Mysql小炒

mysql小炒,记录日常的积累。

Mysql 大小写问题

  • 表名、表别名、字段名、字段别名都小写。SQL保留字段、函数名、绑定变量名都大写。

Exists与in

  • 将设A、B两表,走索引的情况下。根据A、B表的大小比较,如果A表大于B表那么IN的查询效率比EXISTS高。
1
2
3
SELECT * FROM A WHERE cc IN (SELECT cc FROM B)

SELECT * FROM A WHERE EXISTS (SELECT cc FROM B WHERE B.cc=A.cc)

测试环境打开profiling

  • 首先我们需要看下 profiling 是否开启,开启它可以让 MySQL 收集在 SQL 执行时所使用的资源情况,命令如下:
1
2
3
4
5
mysql> select @@profiling;
# profiling=0 代表关闭,我们需要把 profiling 打开,即设置为 1:
mysql> set profiling=1;
# 然后我们执行一个 SQL 查询(你可以执行任何一个 SQL 查询):
mysql> select * from wucai.heros;

DDL设计数据表的原则

  1. 数据表越少越好
  2. 数据表中的字段越少越好
  3. 数据表中联合主键的字段越少越好
  4. 使用主键和外键越多越好

去除重复行

  1. DISTINCT 需要放到所有列名的前面
1
2
# 这么写会报错
SELECT name, DISTINCT age FROM us
  1. DISTINCT 其实是对后面所有列名的组合进行去重。

ORDER BY 子句有以下几个点需要掌握

  1. 排序的列名:ORDER BY 后面可以有一个或多个列名,如果是多个列名进行排序,会按照后面第一个列先进行排序,当第一列的值相同的时候,再按照第二列进行排序,以此类推。
  2. 排序的顺序:ORDER BY 后面可以注明排序规则,ASC 代表递增排序,DESC 代表递减排序。如果没有注明排序规则,默认情况下是按照 ASC 递增排序。我们很容易理解 ORDER BY 对数值类型字段的排序规则,但如果排序字段类型为文本数据,就需要参考数据库的设置方式了,这样才能判断 A 是在 B 之前,还是在 B 之后。比如使用 MySQL 在创建字段的时候设置为 BINARY 属性,就代表区分大小写。
  3. 非选择列排序:ORDER BY 可以使用非选择列进行排序,所以即使在 SELECT 后面没有这个列名,你同样可以放到 ORDER BY 后面进行排序。
  4. ORDER BY 的位置:ORDER BY 通常位于 SELECT 语句的最后一条子句,否则会报错。

SELECT 的执行顺序

  1. 关键字的顺序
1
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
  1. .SELECT 语句的执行顺序(在 MySQL 和 Oracle 中,SELECT 执行顺序基本相同):
1
FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT