mysql 枚举 添加 性能_mysql性能优化

1、读写锁

读锁是共享的,或者说是相互不阻塞的。多个客户在同一时刻可以同时读取同一个资源,而互不干扰。写锁则是排他的,也就是说一个写锁会阻塞其他的写锁和读锁的,这是出于安全策略的考虑。这样就可以确保在给定时间里,只有一个用户能执行写入,宁防止其他用户读取正在写入的统一资源。

在实际的数据库系统中,当某个用户在修改某一部分数据时,mysql会通过锁定防止其他用户读取同一数据,mysql锁的内部管理都是透明的。

2、EXPLAIN你的select查询

使用EXPLAIN关键字可以知道mysql是如何处理你的sql语句,这可以帮你分析你的查询语句或是表结构的性能瓶颈。

3、当只要一行数据时使用 limit 1

加上limit 1 可以增加性能。这样一来,mysql数据库引擎会在找到一条数据后停止搜索,而不是继续往后查找下一条符合记录的数据。

4、为搜索字段建立索引

在表中,有某个字段总要经常用来做搜索,最好是建立索引。

5、避免使用select *

应该养成一个需要什么就取什么的好习惯。

6、不要使用ORDER BY RAND() [随机查询取前几条记录]

7、永远为每一张表设置一个ID

应该为数据库里的每张表都设置一个ID做为主键,而且最好是一个INT型的,并设置为自动增长的AUTO_INCREMENT标志。

就算是你users表有一个主键叫“email”的字段,你也别让它成为主键。使用VARCHAR类型来当主键会使用得性能下降。另外,在你的程序中,你应该使用表的ID来构造你的数据结构。

而且,在MySQL数据引擎下,还有一些操作需要使用主键,在这些情况下,主键的性能和设置变得非常重要,比如,集群,分区……

在这里,只有一个情况是例外,那就是“关联表”的“外键”,也就是说,这个表的主键,通过若干个别的表的主键构成。我们把这个情况叫做“外键”。比如:有一个“学生表”有学生的ID,有一个“课程表”有课程ID,那么,“成绩表”就是“关联表”了,其关联了学生表和课程表,在成绩表中,学生ID和课程ID叫“外键”其共同组成主键。

8、使用ENUM而不是VARCHAR

ENUM类型是非常快和紧凑的,如果你有一个字段,比如“性别”,“国家”,“民族”,“状态”或“部门”,你知道这些字段的取值是有限而且固定的,那么,你应该使用ENUM而不是VARCHAR。

9、尽可能使用NOT NULL来定义字段,NULL会占用额外空间并使得比较复杂,null列

10、使用join来代替子查询,join的column应该建立索引并且类型相同

11、固定长度的表会更快

如果表中的所有字段都是“固定长度”的,整个表会被认为是 “static” 或 “fixed-length”。 例如,表中没有如下类型的字段: VARCHAR,TEXT,BLOB。只要你包括了其中一个这些字段,那么这个表就不是“固定长度静态表”了,这样,MySQL 引擎会用另一种方法来处理。

固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快。而如果字段不是定长的,那么,每一次要找下一条的话,需要程序找到主键。

并且,固定长度的表也更容易被缓存和重建。不过,唯一的副作用是,固定长度的字段会浪费一些空间,因为定长的字段无论你用不用,他都是要分配那么多的空间。使用“垂直分割”技术(见下一条),你可以分割你的表成为两个一个是定长的,一个则是不定长的。

项目中sql语句的总结

1、 在sql语句中最好不要有过于复杂的逻辑,这样会降低sql语句的查询效率和性能;

2、 在sql语句中最好避免出现循环的查询,像统计一个月每天的数据,就不要出现循环每天的时间来进行查询。正确的做法是在sql语句中按天分组查询,但是这里查询出来的是有数据的,没有数据的时间日期不会查询出来,这里就需要在java代码中做处理了,在java代码中循环时间日期,从查询出来的数据中找,没有找到设置为0;

3、 在sql语句中处理时间时最好使用between-- and--;

4、 在sql语句中定义表的别名不要使用a,b,c之类的字母,取名要有意义,比如,alert_record命名为ar, sys_gate 命名为sg, 就是要和表名有关系;

5、 sql语句中避免使用子查询。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值