| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 孤尽班第三天笔记--MySQL规约 -> 正文阅读 |
|
[大数据]孤尽班第三天笔记--MySQL规约 |
建表规约 表、字段命名
这里借用PPT中举的反例 数据类型
表必备三字段 id,create_time, update_time 建表推荐规约
索引
持久性,有序性
存储形式 1. 聚簇索引 (索引和数据存在一起) 2. 非聚簇索引(索引和主键存在一起,但数据在其他地方) 数据约束 1. 主键索引 2. 唯一索引 3. 非唯一索引 索引列的数量 1. 单列索引 2. 组合索引 innoDB可以创建的索引 1. 主键索引 2. 唯一索引 3. 普通索引(就是非唯一索引) nnnoDB不可以建的索引:覆盖索引(通过组合索引来实现) 什么是覆盖索引(covering index)?往下看? 创建索引规约
创建索引避免有如下极端误解
SQL规约索引避坑指南
防止因字段类型不同造成的隐式转换,导致索引失效 比如主键是varchar,但在where中被当成int来比较,这样查询就不会走索引。
利用覆盖引来进行查询操作,避免回表 什么是回表?就是先走一遍非主键索引找到主键,然后再走一遍主键索引找到数据。这样需要查两遍数据库。 什么是覆盖索引? 比如表X上有id,a,b,c四个列,然后有一个a, b, c三个列组成的组合索引。 SELECT * FROM X WHERE a = 1;? 这么写就需要回表(先用组合索引拿到主键,然后用主键索引拿到数据),相反, SELECT id,a, b, c FROM X WHERE a = 1; 这么写就不需要回表,因为所有的列在组合索引里面都有了(id,即主键,就在组合索引的叶子节点里)
如果有order by的场景,请注意利用索引的有序性
页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。 count使用指南
不要使用count(列名)或count(常量)来替代count(*)
count(distinct col)计算该列除NULL之外的不重复行数
当某一列的值全是NULL时,count(col)的返回结果为0,但sum(col)的返回结果为NULL,但count(*)会返回行数。NULL参与的运算结果都是NULL。 NULL值 (NULL参与的运算结果都是NULL)
NULL <> NULL的返回结果是NULL,而不是false
NULL = NULL的返回结果是NULL,而不是true
NULL <> 1的返回结果是NULL,而不是true 分页指南
分页查询逻辑时,若count为0应直接返回
利用延迟关联或者子查询优化超多分页场景 延迟关联,就是延迟join,先缩小查询范围,在进行join 比如 Select * from (select id from a where col1='haha')as a1, b where a1.id = b.id 子查询会通过覆盖索引拿到需要的数据,然后再和b关联,获取数据。这比先把a和b关联再返回数据要快得多。 避坑指南
ORM映射规约
? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:35:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |