Mysql有哪些优化

久未见 提交于 2020-03-17 03:41:42

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等

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!