Mysql优化策略(一)

字段优化

一般情况下数据库中的表越小,执行效率越高,所以我们在创建表的时候,为了获得更好的性能,要讲字段的宽度设计的尽可能小。

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”;

复合索引

某些查询需要比较两个变量,因为单索引我们每次只能使用一个,所以我们可以采用建立多个值的复合索引。同时遵照最佳左前缀原则,我们应将最常用的放在最左边。

索引中不会包含空的列,我们设计数据库时注意不要默认空。

索引值选取要尽可能短

NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替

参考文章

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ambrosedream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值