在做数据库优化的时候,很多小白都可能会说懵...
我们选择Lamp环境的MySQL来举例
首先定位慢语句
a.修改mysql配置文件
vim/etc/my.cnf
在MySQLId里加入如下代码:
log-slow-queries ="/tmp/mysql-slow.log“” #此操作可以将所有的慢查询写在目录tmp下面的mysql-slow.log文件下
long_query_time=1 (单位为秒,超过1秒代表慢查询语句)
重启mysql:
关闭:mysqldump -u root -p shutdown
mysql启动:mysqld_safe -u mysql &
查看/tmp/mysql-slow.log
vim/tmp/mysql-slow.log
增删改优化:
1.Windows打开任务管理器 ctrl+alt+delete
2.linux top命令
3.如果cpu使用率或者内存占用率大的话,及时释放内存,
B。查看表的内容是不是太大:select count(*) from test 如果太大,可以考虑使用缓存
C。检查表的索引是不是很多:desc 表名 如果表索引很多,及时减少索引,因为索引的创建也会消耗资源的开销
D。mysql 主从服务器 读写分离
查询优化:
a.缓存优化 :
原则:数据读的多写的少的,类似于微博等,先读缓存,缓存没有的话,那么就读数据库,然后取出数据后放入缓存,同时返回响应,可以使用redis或者memcache。
索引的优化:
索引的定义:索引就类似于字典目录可以快速访问数据表中的特定信息
索引类型:
a.主键索引:它是一种特殊的唯一索引,不允许空值
b.唯一索引:与普通索引类似,不同的是:索引列的值必须唯一,但允许有空值
c.普通索引:最基本的索引,没有任何限制
索引的创建:
命令创建:
<1 主键索引:
键表时:create table test(id int primary key auto_increment,name char(30));
建表后:alert table test add primary key id
《2 唯一索引:
建表时:create table test(id int primary key auto_increment,name char(30), unique name(name))
建表后:alert table test add unique name(name)
3>.普通索引
建表时:create table test(id int primary key auto_increment, name char(30),index name(name))
建表后;alert table test add index name(name)
索引删除
主键索引:alert table test modify id int(10) 或 alert table test droup primary key
非主键索引:alert table test drop 表名
索引的弊端:
索引并非是绝对的好,索引的创建也是有资源开销的,比如磁盘空间的占用,并且索引还会影响增删改语句的执行效率
explain语句分析:
示例“”explain select * from user\G
根据返回参数来判定是否需要加索引
《1 row 查询次数
《2 type 连接类型
全表扫描
explain select * from test
查询时一定不能出现all类型 全表扫描,速度是最慢的,如果在一个数据很多的数据表里分析sql语句的时候,返回类型出现index或者all ,那个时候必须加索引
3》key 搜素使用的索引
其它的优化小技巧:
1.尽量使用一条语句插入,避免循环插入
2.不要将图片存入到数据库中,用路劲代替
3.分组时添加group by id order by null 及时释放资源
4.尽量避免 * ,效率较低
5/使用or语句要注意,两侧的语句都有索引才能使用索引
6.针对myisam的表要定期执行命令 optimize table test 合并表空间碎片