我把MySQL的内容整理成9篇博客,学完这9篇博客虽不能说能成为大神,但是应付一般中小企业的开发已经足够了,有疑问或建议的欢迎留言讨论。
Mysql 与 ORACLE 开发差异
一、 常用的基本数据类型对比
二、 常用 SQL函数以及其它语法差异
Mysql 优化
一、 数据库设计
a) 适当的违反三大范式。
b) 适当建立索引。
c) 对表进行水平划分(按照一个周期对表数据进行拆分)。
d) 对表进行垂直划分(对字段内容较长的字段进行拆分到一个新表)。
e) 选择合适的字段类型。能占用字节小的字段就不要去大字段。
f) 文件、图片等二进制的文件使用文件系统存储,不用数据库。数据库中只存储文件路径。
g) 宁可集中批量操作 也不要频繁操作。
h) 合适的引擎选择 mysql 的数据库引擎,innodb,myisam,memory 。Myisam 比innodb 的读速度更快。Innodb 是支持事务。Myisam 不支持事务。
二、SQL 语句优化
a. 使用 EXPLAIN 进行 SQL 语句的执行解析。
b. Mysql 慢 日 志 的 功 能 需 要 去 配 置 文 件 修 改 slow_query_log=/usr/xx.txtlong_query_time=2 单位秒。
c. 查询语句尽量避免全表扫描,在 where order by 等涉及的字段建立索引。
d. 尽量避免在 where 子句中对 null 值进行判断,如果进行 null 判断则会放弃索引查询走全表扫描,解决办法:在 null 字段设置一个默认值来代表无值。
e. 尽量避免在 where 子句中使用!= 或 <>操作符,放弃走索引进行全表扫描,解决办法:改为>= <=。
f. Like 查询,使用’%jame’ 不会走索引,使用’jame%’ 会走索引。
g. 尽量避免在 where 子句中使用 or 来连接条件 不会走索引走全表扫描。解决办法:将两个条件作为两条 sql 语句执行 使用 union all 来进行结果集的整合。
h. In 和 not in 也要少用,会导致全表扫描。
i. 尽量避免在 where 子句中对字段进行表达式的操作,不会走索引会走全表扫描。Num/3=100 修改成 num = 3*100。
j. 尽量避免在 where 子句中使用函数对字段进行操作. Substring(name,1,3)=’xzg’ 修改成name like ‘xzg%’。
k. 不要在 Where 字句的 =号的左边进行函数或者其他表达式的运算,数据库可能就无法正确使用索引。
l. 使用 exists 来代替 in。
m. 在代码中尽量避免使用 select * from 而是列出准确的字段名。
n. 尽量避免使用游标。
o. 数据较少的表 尽量让他走全表扫描。