Mysql数据库使用注意事项

发布时间 2023-07-25 18:50:33作者: PHP123net

参考:https://blog.51cto.com/u_16099244/6529946

数据库注意事项:

1、重要的sql必须被索引,例如:

1)select、update、delete语句的where条件列;

2)order by、group by、distinct字段

2、mysql索引的限制:

1)mysql目前不支持函数索引

2)使用不等于(!=或者<>)的时候,mysql无法使用索引

3)过滤字段使用单行函数 (如 abs (column)) 后, MYSQL无法使用索引

4) join语句中join条件字段类型不一致的时候MYSQL 无法使用索引

5)使用 LIKE 操作的时候如果条件以通配符开始 (如 ‘%abc…’)时, MYSQL无法使用索引

6)使用非等值查询的时候, MYSQL 无法使用 Hash 索引

7)BLOB 和 TEXT 类型的列只能创建前缀索引

3、mysql常见sql规范:

1)SQL语句尽可能简单 大SQL语句尽可能拆成小SQL语句,MySQL对复杂SQL支持不好

2)事务要简单,整个事务的时间长度不要太长,SQL结束后及时提交

3)限制单个事务所操作的数据集大小,不能超过 10000 条记录

4)禁止使用触发器、函数、存储过程

5)降低业务耦合度,为scale out、sharding留有余地

6)避免在数据库中进行数学运算(数据库不擅长数学运算和逻辑判断)

7)避免使用select *,需要查询哪几个字段就select这几个字段,避免buffer pool被无用数据填充

8)条件中使用到OR的SQL语句必须改写成用IN()(OR的效率比IN低很多)

9)IN()里面的数据个数建议控制在 500 以内,可以用exist代替in,exist在某些场景比in效率高,尽量不使用not in

10)limit分页注意效率。 limit越大,效率越低。可以改写limit,例如:

select id from test limit 10000,10 可以改写为 select id from test where id > 10000 limit 10

11)当只要一行数据时使用LIMIT 1

12)获取大量数据时,建议分批次获取数据,每次获取数据少于 10000 条,结果集应小于 1M

13)避免使用大表做 JOIN,使用group by分组、自动排序

14)SQL语句禁止出现隐式转换,例如:select id from test where id=’1’,其中 id 列为 int 等数字类型

15)在SQL中,尽量不使用like,且禁止使用前缀是%的like匹配。

16)合理选择union all与union

17)禁止在OLTP类型系统中使用没有where条件的查询

18)使用 prepared statement 语句,只传参数,比传递 SQL 语句更高效;一次解析,多次使用;降低SQL注入概率

19)禁止使用 order by rand().

20)禁止单条 SQL 语句同时更新多个表。

21)不在业务高峰期批量更新或查询数据库,避免在业务高峰期alter表

22)禁止在主库上执行 sum,count 等复杂的统计分析语句,可以使用从库来执行