MySQL经验累积


1, 尽可能地少进行连表查询。如果一定要进行连表查询,一定要消除笛卡儿积现象。对于MySQL是小表在前大表在后,Oracle是大表在前小表在后,并且这个相等字段一定要建一个主键。

 

2, 杜绝连表查询还带上子查询的方式。

 

3, 坚决杜绝做更新或者删除的时候带上子查询。在稍微大一点的访问量上就会造成上锁情况。

 

4, 需要什么字段就查询什么字段出来。别全部查询出来又不需要 。

 

5, 利用COUNT(1)代替COUNT(*)。如果我们只要一条结果请在后面加上 LIMIT 1.

 

6, 尽量少使用GROUB BY ORDER BY ,如果一定要使用,请尽可能给字段建立一个索引,并确保能够使用上索引。

 

7, 每一张表尽量有一个主键id(INT).

 

8, 使用Monyog监测数据库,可以很直观看见,访问数据的每一条sql的执行计划。跟使用EXPLAIN是一样的。

 

9, 建立好索引,优化好子查询,拆分复杂的sql为简单的sql.尽可能少在sql语句中调用函数,因为函数返回值总是变化的,这样无法利用MySQL的查询缓存功能。可以利用固定变量代替。也可以利用MySQL内部存储代码,这样可以节约带宽和网络延迟。但是会增加复杂性,可能耗服务器性能,调试问题难,还是最好利用应用程序。

 

10, 通常情况下最好指定列为NOT NULL,除非真的需要存储NULL值。

 

11, 只分配真正需要的空间。

 

12, 通常也尽量使用TIMESTAMP,因为它比DATATIME空间效率更高。

 

13, 一旦选定某种类型比如INT型作为主键,在所以关联表中都使用INT型。

 

14, 随机字符串,比如MD5(),SHA1()或者UUID()产生的字符串,会任意分配在很大空间内,将会导致INSERT以及一些SELECT语句变慢。并且随机值会使得缓存赖以工作的访问局部性原理失效。

 

15, 无符号整数存储IP地址。

 

16, MySQL中限制每个关联操作最多只能61张表,单个查询最好在12表以内做关联。

 

17, MySQL会在索引中存储NULL值,而Oracle则不会。

 

18, 范式设计数据库是好,但是有时候反范式也是必要的。做数据库设计时候尽可能两者兼顾起来,并且要提前明确是否需要统计信息,因为一旦设计到统计系统,如果表设计不好,到时候会关联很多表,数据量又大,直接会拖死服务器。

 

19, 不管怎样,注意细节问题并深刻理解索引,利用好索引,就可以了。索引也是一种数据结构。是一个非常关键的东西。它的顺序也十分重要。

 

20, 如果我们写SQL会出现这样多问题,为什么不利用ORM?大神们写的肯定比我们好。ORM毕竟不是AI,因为索引是复杂和精细的,很多时候SQL语句能够利用上索引的功能,是需要很多知识的。

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值