字段优化
一般情况下数据库中的表越小,执行效率越高,所以我们在创建表的时候,为了获得更好的性能,要讲字段的宽度设计的尽可能小。
eg.
定义邮政编码,我们不要盲目的将其设置为 C H A R ( 255 ) CHAR(255) CHAR(255)或者 V A R C H A R ( ) VARCHAR() VARCHAR()我们只需要使用 C H A R ( 6 ) CHAR(6) CHAR(6)就可以很好的完成任务了。
此外,我们设计字段的时候,尽可能设计非空字段,因为执行查询时,数据库比较空值也是一项开销。
对于某些省份、性别,我们可以将其定义为 E N U M ENUM ENUM类型,MySQL中,ENUM类型作为数值型被处理,数值型相对于文本型处理效率更高。
Join代替子查询
子查询就是在select语句中嵌套一个select语句。
如果可以使用
j
o
i
n
join
join代替子查询的情况下,尽量使用
j
o
i
n
join
join,这样效率会更好。(省去了在内存中创建临时表的步骤)
使用Union代替手动创建的临时表
事务
一种 b e g i n begin begin开始, c o m m i t commit commit结束的多条数据操作语句的集合。可以保证安全。
锁定表
高并发系统中,事务的独占性会导致严重的响应延迟。此时使用锁定表会得到比较好的优化。
LOCK TABLE inventory WRITE SELECT Quantity FROM inventory WHERE Item = ‘book’;
外键:保证数据关联性
索引
当数据库中常用 M A X ( ) MAX() MAX()– M I N ( ) MIN() MIN()— O R D E R B Y ORDER BY ORDERBY时,增加索引能够对性能有明显的提高。
索引一般建立在key上,orderby、where/join判断的值上,不要把索引建立在含有大量重复值的字段上。(ENUM类型字段)
优化查询语句
- 字段比较最好是相同的数据类型比较。
- 在建有索引的字段上尽量不要使用某些函数进行操作。
- 使用 like 和通配符对性能也有比较大的消耗,可以像下面这样:
select name from books where name like “MySQL%”; 改为下面:
select name from books where name>=“MySQL” and name<“MySQM”;
复合索引
某些查询需要比较两个变量,因为单索引我们每次只能使用一个,所以我们可以采用建立多个值的复合索引。同时遵照最佳左前缀原则,我们应将最常用的放在最左边。
索引中不会包含空的列,我们设计数据库时注意不要默认空。