mysql的使用习惯

mysql的使用习惯

1、写完SQL先expain查看执行计划(SQL性能优化)。

2、操作update或者delete语句,加个limit。

	1)  降低写错SQL的代价
	2)SQL效率很可能更高
	3)可以避免长事务
	4)数据量过大,容易把cpu打满

3、设计表的时候,所有表和字段都添加相应的注释(SQL规范优雅)。

4、SQL书写格式,关键字大下保持一致,使用缩进。

5、insert语句标明对应的字段名称。

6、变更SQL操作先在测试环境执行,写明详细的操作步骤以及回滚方案,并在生产前review。

7、设计数据库表的时候,加上三个字段:主键、create_time、update_time。

8、写完SQL语句,检查where、order by、group by后面的列,多表关联的列是否已加索引,优先考虑组合索引(SQL性能优化)。

9、修改或者删除重要数据前,要先备份。

10、where后面的字段,留意其数据类型的隐式转换。

11、尽量把所有的列定义为NOT NULL。

12、修改或者删除SQL,先写where查一下,确认后再补充delete 或update。

13、减少不必要的字段返回,如使用select <具体字段> 代替 select * 。

	1)节省资源、减少网络开销。
			select * 数据库需要解析更多对象、字段、权限、属性等。sql语句复杂,硬解析较多,会对数据库造成负担。
			若有log、IconMD5等无用且大文本字段,数据传输时网络开销较大,当应用程序和数据库不在同一台服务器时开销非常明显。
			对于无用的大字段,长度超过728字节,会先把数据序列化到另一个地方,因此读取这条记录会增加一次IO操作 。
	2)可能用到覆盖索引,减少回表,提高查询效率。
			mysql优化器‘覆盖索引’策略:例如表t(a,b,c,d,e,f,g) 其中a为主键,b列有索引。
			那么磁盘上有两颗B+树,即聚集索引和辅助索引分别为(a,b,c,d,e,f,g)和(b,a),如果用户只需要a、b两列数据。可以直接走辅助索引即可得数据,select * 由于还要获取其他列数据,则需要走辅助索引再走聚集索引,多查了一次B+树速度必然会慢。
			由于辅助索引的数据较少。很多情况通过覆盖索引(即通过辅助索引查就能获取用户需要的所有列),直接从内存中取,而聚集索引大概率在磁盘中,所以速度差异显著,几乎是数量级的差异。

14、所有表必须使用Innodb存储引擎。

1)支持事务、支持行级锁、更好的恢复性,高并发下性能更好。

15、数据库和表的字符集尽量统一使用utf-8。

1)可以避免乱码问题。
2)可以避免不同字符集比较转换,导致索引失效问题。

16、尽量使用varchar代替char。

1)变长字段存储空间小。

17、如果修改字段含义或对字段表示的状态追加时。需要及时更新字段注释。

18、SQL命令行修改数据,养成begin+commit事务的习惯

begin;
update user set name='admin' where id='1';
commit;

19、索引命名要规范,主键索引名为PK_字段名;唯一索引名为UK_字段名;普通索引名则为idx_字段名。

20、where 从句中不对列进行函数转换和表达式计算

21、如果修改/更新数据过多,考虑批量进行。
如:

1)大批量操作会造成主从延迟
2)大批量操作会产生大事务,阻塞
3)大批量操作,数据量过大,会把CPU打满
for each(200) {
	delete from user limit 500;
}

版权声明:本文为qq_37487977原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。