mysql 优化笔记 未完

本文介绍MySQL的性能监控方法、慢查询日志配置、常见索引类型及其创建方式,并探讨了存储引擎的选择和数据库备份策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

show status 
show status like 'com_select'
show status like 'com_update'


show[session|global] status like ...如果不写默认是[session|global]会话,指取出当前窗口执行,如果你想看所有的(从Mysql启动到现在,则应该global)


show variables like 'long_query_time' //可以显示当前慢查询时间
set long_query_time=1




为了存储过程能够正常执行,我们需要把命令执行结束符修改一下
delimiter $$  //命令结束符从“ ; ” 改成了 “ $$ ”


dual亚元表 就是空表




#随即添加雇员[光标]  400w
create procedure insert_emp(in start int(10),in max_num int(10))
begin
declare i int default 0; 
#set autocommit =0 把autocommit设置成0
 set autocommit = 0;  
 repeat
 set i = i + 1;
 insert into emp values ((start+i) ,rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());
  until i = max_num
 end repeat;
   commit;
 end $$


 call insert_emp(100001,4000000);


 bin\mysql.exe --safe-mode --slow-query-log
 先关闭mysql,再启动,如果启用了慢查询日志,默认把这个文件放在 my.ini文件中记录的位置
 datadir=' ' //这个目录下




默认情况下,mysql认为10秒才是一个慢查询
 show variables like 'long_query_time';  //可以显示当前慢查询时间
 set long_query_time=1; //修改漫查询时间


 构建达标-》 大表中记录有要求,记录是不同才有用,否则测试效果和真实的相差很大
 insert into test value(1,'aa');
 insert into select XX from test;


 优化问题
 通过explain语句可以分析,mysql如何执行你的sql语句


添加索引
四种索引(主键索引/唯一索引/全文索引/普通索引)


1.添加
1.1 主键索引添加
当一张表,把某个列设为主键的时候,则该列就是主键索引
create table aaa(id int unsigned primary key auto_increment,name varchar(32) not NULL default '' )
这里的id 列就是主键索引
如果你创建的表没有主键索引,没有指定的主键索引,也可以在创建表后,在添加


alter table 表名 add primary key (列名)


举例:
create table bbb(id int,name varchar(32) not null default ''); 




mysql data 目录下
.frm 表的结构
.MYI 表的索引


1.2普通索引
一般来说,普通索引的创建,是先创建表,然后在创建普通索引


1.3 创建全文索引
全文索引,主要针对文件,文件的索引,比如文章,全文索引针对MyISAM有用


创建:
CREATE TABLE article (
    id int UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title varchar(200),
    body TEXT,
    FULLTEXT(title,body)
)engine=MyISAM charset utf8 


检查是否有索引 show index from 表名\G;
错误用法:
select * from articles where body like '%mysql%'; 【不会使用到全文索引】
证明
explain select * from article where body like '%mysql%';


正确的用法
select * from articles where match(title,body) against('database');


说明:
1.在mysql 中fulltext,索引只针对MYISAM 生效
2.针对英文生效 ->sphinx(coreseek)技术处理中文
3.使用方法是match(字段名) against('关键字')
4.全文索引有一个叫停止词,因为在一个文本中,创建索引是一个无穷大的数,因此,对一些常用的词和字符,就不会去创建,这些词称为停止词


select match(title,body) against('database') from article
结果是 
0.65.。。。
0
0
可能搜索到的概率


select match(title,body) against('a') from article
结果是 
0.
0
0
这种可能就是停止词,




1.4唯一索引
1.当表的列被指定为unique 约束时,这列就是一个唯一索引


create table ddd(id int primary key auto_increment,name varchar(32) unique)


这是 name列就是唯一索引
name 列是否可以为 null,而且可以多个,电视‘’ 空字符串是不能为多个


2.在创建表后,在创建唯一索引
create table eee(id int primary key auto_increment,name varchar(32) not null default '')


create unique index 索引名 on 表名(列名1,列名2)






2.查询
desc 表名 【该方法的缺点是:不能够显示索引的名字】
show index(es) from 表名


3.删除
alter table 表名 drop index 索引名
如果删除主键索引。
alter table 表名 drop primary key [这里有问题]


4.修改




索引的注意事项
1.占用磁盘空间
2.对dml操作会有影响,会变慢
MyISAM BTREE


总结:满足一下条件的字段,才能创建索引
a.肯定在where 条件经常使用的
b.该字段的内容不是唯一的几个值(如:sex)
c.字段内容不是频繁变化的








为什么创建索引后速度回变快呢?
如果不加索引的话,它会全部检索完毕,在返回结果。
二叉树算法->索引文件 节省时间
第9课








如何选择mysql 的存储引擎


选择存储引擎
如果你不需要外键 可以用 MyISAM(对事务要求不高,同时以查询和添加为主的,我们考虑使用myISAM) ,速度会快一点,比如 bbs 中的发帖表和回复表
如果需要外键用 InnDB 银行系统,存储:对事物的要求高,保存的数据都是重要的数据,我们建议使用,比如订单表 ,比如余额账户表
Memory 存储,比如我们数据变化非常频繁,不需要入库,同时又频繁的查询和修改,我们考虑使用memory(插入的数据是在内存中,而不再数据中)
 
(在PHP开发中,通常不设置外键,通常是在程序中保证数据的一致)


如果你的数据的存储引擎是MyISAM,请一定要定时进行碎片整理
optimize table test100;
mysql_query("optimize table 表名");


定时完成数据库备份
1.手动备份数据库备份 这个指令是在cmd 控制台中执行
mysqldump -uroot -p密码 数据库的名字  -> 文件路径
如果要备份数据库的某一张表


mysql控制台
source d:/temp.dept.bak 


2.使用定时器,定时完成
 
把备份数据库的指令,写入到bat文件,然后通过任务管理器去定时调用bat文件


mysql.bat 内容
E:\wamp\bin\mysql\mysql5.6.17\bin\mysqldump -uroot -p test > d:/test.dept.bak
把mysql.bat 做成一个任务 并定时调用 


然后设置windows中的任务计划


步骤 任务计划->增加一个任务,选中你的mysql.bat文件,最后配置


3.制作一个时间,
<?php
   date_default_timezone_set('PRC');


   $bakfilename=data("Y-m-d",time());


   $commen="E:\wamp\bin\mysql\mysql5.6.17\bin\mysqldump -uroot -p test > d://{$bakfilename}";
   exec($commen);
 ?>


 然后制作一个mysql2.bat 内容是
E:\wamp\bin\php\php5.5.12\php.exe c://wamp/www/ceshi/index.php


定时发送邮件


使用php完成定时发送邮件的功能


2.设计一个邮件表


create table maillist(id int unsigned key auto_increment, title varchar(20) not null default,content text,sendtime datetime)

Mysql 可以做if 判断

SELECT c.id,ifnull(cd.cid,0),`title`, ifnull((cd.val+0),0) as val  FROM db_cost as c left JOIN db_costdata as cd on c.id = cd.cid and cd.year = '2015' WHERE c.uid = '86' GROUP BY c.id ORDER BY c.id desc LIMIT 0,8



写代码
1.怎么可以定时的去检索哪些邮件该发送,只能每隔一段时间 就看看哪些邮寄该发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值