mysql的优化
1.建立索引
索引可以加快查询速度,但是对于插入的性能有略微影响,因为插入的时候还要保存索引;
mysql中共有4种索引:
①主键索引 primary key : 主键,唯一
②唯一索引 unique key: 是指一个表中不能有同名的列,但是一列中可以有相同的数据
③常规索引 key/index: 通常用于经常出现在查询条件的列或排序条件的列中,如经常需要按年龄查找,或者按城市分组:wehere age >18或group by city;那么age和 city就应该设置普通索引。
④全局索引 fulltext: 一般不用
增加索引的方法:
alter table 表名 add 索引种类 索引名(可省略) (字段名)
如: ALTER TABLE student ADD INDEX (sname)
②create index 索引名 on 表名(字段名)
查看表中的索引:
SHOW INDEX FROM student
删除索引
DROP INDEX sname_3 ON student --sname_3是索引名,student是表名
带有条件的查询,如果有索引,执行时直接定位到指定位置,如果没有索引则遍历,mysql底层为B+树。
2.使用mysql的缓存
大多数的MySQL服务器都开启了查询缓存。这是提高性能最有效的方法之一,而且这是被MySQL引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放入一个缓存中,这样后续的相同查询就不用操作而直接访问缓存结果了。
这里最主要的问题是,对于我们程序员来说,这个事情是很容易被忽略的。因为我们某些查询语句会让MySQL不使用缓存,示例如下:
1:SELECT username FROM user WHERE signup_date >= CURDATE()
2:SELECT username FROM user WHERE signup_date >= '2021-05-02‘
上面两条SQL语句的差别就是 CURDATE() ,MySQL的查询缓存对这个函数不起作用。所以,像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存。
3.explain分析sql的执行情况
使用下面的语句可以查看sql语句的执行情况,从而可以帮助我们调节,选择最合适的索引,以得到最高效地查询。具体可参考链接博客
explain + select语句;
4.使用limit
当只查找一行数据时使用limit 1,查到数据即返回结果,没必要继续执行了
5.使用join
多表联合查询的时候尽量使用join,而不使用子查询等。
6.尽量不使用select *
需要哪些列就select 哪些列
7.vchar类型的使用
使用vchar(n)时,n的大小要选取合适,在能存储完整数据的原则下尽量选择小