MySQL数据库设计、使用准则

来源:TechTMT.Com  作者:整理  日期:2020-10-30 04:24:38

以下是共25条关于MySQL数据库设计、使用准则:

1、尽可能少的依赖MYSQL自身的特性

2、select、update、delete大数据量的表全部由主键完成

3、所有MYSQL语句一律封装好再使用,业务层绝对不能使用MYSQL语句

4、不得使用外键(数据一致性、完整性、可靠性自行把握备份维护)

5、表和字段命名、自定义方法、声明数组、变量、以及 css 定义class 和 id,包括表单,不管是 php 还是 js 还是 html ,命名务必使用 唯一前缀_单词(下划线"_"分割) 不要使用拼音

6、一般不要乱创建索引,一个库建议不超5个;实在要新增时,在副表建,完后灌水最少100万测试性能。索引以左优先原则创建。

7、禁止使用未建索引的查询

8、使用 int、tinyint 类型建立有效索引,尽量少使用或不使,用 char 或 varchar 类型建立索引

9、禁止在状态 status 字段上建立索引,因为在海量数据下筛选为数不多的数据,得不偿失

10、禁止使用索引类型 UNIQUE 所有业务逻辑在程序中完成

11、禁止在 mysql 做运算查询,如 where views>10 或 group by 之类,尽可能避免在 where 语句中使用 != 或者 <> 操作符,因为,查询引用会放弃索引进行全表扫描。实践表明高负载环境,数据库使用场景越简单越好,最好的结果就是所有查询语句除了 where 没其他

12、禁止在非索引的字段进行查询

13、禁止使用连表查询

14、禁止使用非主键统计语句

15、查询、修改、删除尽可能的使用主键

16、查询 SELECT * 不写字段,一次查完

17、order by 必须建立在索引之上

18、禁止使用日期类型的字段DATE\DATETIME之类,所有日期类型一律使用int,储存为时间戳或数字串如20200113;

19、字段储存尽量设计为使用tinyint或int,能用tinyint就不用int,能用int就不用bigint。能用tinyint代替char和varchar就代替,比如很多人喜欢直接用“男”“女”储存性别,可以直接用tinyint(1),储存值0无性别 1男 2女 这种形式;

20、创建字段默认值禁止使用“无”或 “NULL”,数字型字段一律默认值0,字符类型一律空。

21、很少使用的大字段拆分到单独表,如CMS程序的内容详情页,使用单独的data表,因为,绝大部分的操作都以标题(title)为主;

22、封装 SQL 语句不能任性写,必须依照现有的索引左优先原则,创建索引前请设计好,不能 where `uid`='1' and `tid`=`1` 然后高兴就又写成 where `tid`=`1` and `uid`='1'

23、所有内容主题类的请求数据,一律查询主键后扔进统一拉取数据的函数,统一获取数据,避免多次查询同一个表,cms 所有的操作,只对同一个表查询一次,不管有什么花样的数据调用,任何页面的数据,每个表只能查询一次,这是原则,不能改变。很多CMS同一个页面查询同一个表 N 次,还是大数据承载量和高并发。列表类统一拉取,避免多次查询thread表 thread_unified_pull($arr) 具体二开请自行查看该函数如何使用;详情页其他主题调用,集合tid统一拉取数据 thread_other_pull($thread) 具体二开请自行查看该函数如何使用;

24、单一查询适当使用 cache ,用户类数据一律永久缓存,标题类一律缓存生命期7200秒,内容详情类一律缓存生命期3600秒或1800秒,更新数据记得清理缓存cache_delete 或者直接 cache_update 更新缓存数据(具体使用请查看相关函数),避免再次到SQL获取,对于一直动态变化的数据没必要使用缓存,如列表。

25、字段类型使用约束:尽可能的使用 tinyint 或 int。

稿源:TechTMT.Com综合整理!

分类:文章
编辑:tmt
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。文章版权归原作者所有,内容不代表本站立场!
免责声明: 阁下应知本站所提供的内容不能做为操作依据。本站作为信息内容发布平台,不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考! 如文中内容影响到您的合法权益(含文章中文字、图片等),请及时联系本站,我们会及时删除处理。