探讨在数据库设计中,主键应该选择 int 还是 bigint。通过分析存储成本、系统风险以及现代工程的统一规范,解释为什么在大多数场景下“无脑 bigint”才是降低心智负担和系统风险的最优解。
请注意
sql语句编写完成以后,要习惯用explain分析SQL语句根据结果进而进行sql方面的优化处理,此文章介绍explain 下type类型的理解和介绍
| type类型 | 介绍 |
|---|---|
| All | MySQL将遍历全表以找到匹配的行 |
| index | 查找所有的索引树,比ALL要快的多,因为索引文件要比数据文件小的多,ALL不使用任何索引,进行全表扫描,性能最差 |
| range | 查找某个索引的部分索引,一般在where子句中使用 < 、>、in、between等关键词,只检索给定范围的行,属于范围查找 |
| ref | 查找非唯一性索引,返回匹配某一条件的多条数据,数据返回可能是多条,属于精确查找 |
| eq_ref | 查找唯一性索引,返回的数据至多一条(0或者1条),属于精确查找 |
| const | 表示通过索引一次找到了,const用于primary key 或者 unique 索引。因为只匹配一行数据,所以很快,将主键置于where列表中,mysql 就能将该查询转换成一个常量。 |
| system | const的特例,仅返回一条数据的时候 |
| NULL | MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。 |
从上往下越来越好使用索引的语句要达到range 级别
system > const > eq_ref > ref > range > index > All
延伸阅读:
本文系统讲解 MySQL 数字类型字段的设计方法,从类型选择、NOT NULL、DEFAULT 默认值到金额精度与状态字段建模,提供面向大型系统的数据库设计实践,帮助开发者构建高可维护、高性能且具备长期扩展能力的表结构。
为状态字段选择正确的数据类型是数据库设计的基础。本文用最直观的方式,为你解析 ENUM 和 TINYINT 的优缺点。无论你是刚入门的新手还是寻求规范的开发者,都能快速理解何时该为了可读性选择 ENUM,何时又该为了灵活性拥抱 TINYINT。
还在为MySQL INT字段的默认值是 0 还是 NULL 而犹豫不决吗?本文将一篇讲透两者的本质区别,破除“NULL影响性能”等过时观念。从数据建模的根源出发,为你提供清晰的选择标准,让你的数据库设计更加健壮与专业。
本文详细阐述了 PHP 项目中常见的安全威胁,并提供了具体的实战防护技巧,涵盖 SQL 注入、XSS 攻击、文件包含漏洞等多个方面,帮助 PHP 开发者构建安全可靠的应用程序。
本文全面深入地探讨了 PHP 8 注解,从基础概念、原理分析到自带注解详解与高级应用实践,为开发者提供了关于注解的全方位知识体系,助力其熟练掌握并运用这一强大特性。
本文讲述在 Laravel + PHP 项目中,使用 php artisan route:cache 缓存路由时部分路由丢失的问题,分析出因特定路由分组定义方式导致问题,给出正确的定义格式及多文件支持的示例,并总结相关建议。
深入探讨如何优化 API 设计与交互,涵盖设计原则、交互优化、错误处理及文档化等方面,助力实现高效的前后端协作。