Mysql有哪些优化

1.表的设计合理化
2.给搜索字段建立索引
索引提供了高效访问数据的方法,加快了查询的速度。使用所以可以快速的定位到表中的某条记录,从而提高数据库查询的速度,提高数据库的性能。如果查询的时候没有使用索引,查询语句将扫描表中的所有记录。在数据量大的情况下,这样查询的速度会很慢。如果使用索引进行查询,查询语句可以根据索引快速定位到待查询的记录,从而减少查询的记录数,达到提高查询速度的目的。
创建索引:
在执行CREATE TABLE语句时可以创建索引
ALTER TABLE 用来创建普通索引、唯一索引(UNIQUE)、主键索引(PRIMARY KEY)和全文索引(FULLTEXT) 如:
ALTER TABLE 表名 ADD INDEX 索引名(字段名)
ALTER TABLE 表名 ADD UNIQUE (字段名)
ALTER TABLE 表名 ADD PRIMARY KEY (字段名)
ALTER TABLE 表名 ADD FULLTEXT (字段名)
也可以使用CREATE创建索引
注意点:不能用CREATE INDEX语句创建PRIMARY KEY索引

查看索引:
show index from 表名

删除索引:
drop index index_name on table_name

3.选择正确的存储引擎
Mysql常用的引擎:
InnoDB引擎:InnoDB引擎提供了对数据库acid事务的支持,并且还提供了行级锁和外键的约束,它的设计目标就是处理大数据容量的数据库系统。但是该引擎不支持全文搜索,同时启动也比较慢,它不会保存表的行数,所以当进行select count(*) from table语句时,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景使用会提升效率。

MyIASM引擎:MySQL默认的引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行插入和更新语句时,即执行写操作时需要锁定这个表,所以会导致效率降低。不过和InnoDB不同的是,MyIASM引擎保存了表的行数,于是当进行select count(*) from table时,可以直接读取已经保存的值而不需要进行扫描全表。所以,如果表的读取操作远远多于写操作时,并且不需要事务的支持,可以将MyIASM作为数据库引擎首选。
4.垂直分割分表

sql的优化
尽量避免使用select *,列举要查询的字段
尽可能的使用NOT NULL
为查询缓存优化查询
使用连接(join)来代替子查询
拆分大的delete或insert语句
避免%xxx式查询
OR改写成IN:OR的效率是n级别,IN的效率是log(n)级别,in的个数建议控制在200以内
少用JOIN等

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值