mysql小炒,记录日常的积累。
Mysql 大小写问题
- 表名、表别名、字段名、字段别名都小写。SQL保留字段、函数名、绑定变量名都大写。
Exists与in
- 将设A、B两表,走索引的情况下。根据A、B表的大小比较,如果A表大于B表那么IN的查询效率比EXISTS高。
1 | SELECT * FROM A WHERE cc IN (SELECT cc FROM B) |
测试环境打开profiling
- 首先我们需要看下 profiling 是否开启,开启它可以让 MySQL 收集在 SQL 执行时所使用的资源情况,命令如下:
1 | mysql> select @@profiling; |
DDL设计数据表的原则
- 数据表越少越好
- 数据表中的字段越少越好
- 数据表中联合主键的字段越少越好
- 使用主键和外键越多越好
去除重复行
- DISTINCT 需要放到所有列名的前面
1 | # 这么写会报错 |
- DISTINCT 其实是对后面所有列名的组合进行去重。
ORDER BY 子句有以下几个点需要掌握
- 排序的列名:ORDER BY 后面可以有一个或多个列名,如果是多个列名进行排序,会按照后面第一个列先进行排序,当第一列的值相同的时候,再按照第二列进行排序,以此类推。
- 排序的顺序:ORDER BY 后面可以注明排序规则,ASC 代表递增排序,DESC 代表递减排序。如果没有注明排序规则,默认情况下是按照 ASC 递增排序。我们很容易理解 ORDER BY 对数值类型字段的排序规则,但如果排序字段类型为文本数据,就需要参考数据库的设置方式了,这样才能判断 A 是在 B 之前,还是在 B 之后。比如使用 MySQL 在创建字段的时候设置为 BINARY 属性,就代表区分大小写。
- 非选择列排序:ORDER BY 可以使用非选择列进行排序,所以即使在 SELECT 后面没有这个列名,你同样可以放到 ORDER BY 后面进行排序。
- ORDER BY 的位置:ORDER BY 通常位于 SELECT 语句的最后一条子句,否则会报错。
SELECT 的执行顺序
- 关键字的顺序
1 | SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... |
- .SELECT 语句的执行顺序(在 MySQL 和 Oracle 中,SELECT 执行顺序基本相同):
1 | FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT |