Mysql数据库优化技术

来源:互联网 发布:医保大数据分析 编辑:程序博客网 时间:2024/05/22 03:19

对Mysql优化时是一个综合性的技术,主要包括

1.表的设计合理化(符合3NF)

2.添加适当索引(index)[四种:普通索引、主键索引、唯一索引unique、全文索引]

3.分表技术(水平分割,垂直分割)

4.读写分离[写:update、delete、insert]

5.存储过程(模块化编程,可提高速度)

6.对Mysql配置优化(配置最大并发数my.ini,调整缓存大小)

7.Mysql硬件升级

8.定时的去清除不需要的数据,定时进行碎片整理(MyISAM)


1.表的设计合理化(符合3NF)

1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解只有数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sql server),就自动的满足1NF

2NF: 表中的记录是唯一的就满足2NF, 通常我们设计一个主键来实现

3NF: 即表中不要有冗余数据就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放


mysql数据库的一些运行状态查询

show status like 'uptime';查询运行时间


show status like 'com_select';查询查询语句的次数

show status like 'com_insert';查询插入语句的次数

...类推 update  delete

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


show status like 'connections';连接数

show status like 'slow_queries';//显示慢查询次数 默认10秒是慢查询

 

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

set long_query_time=1;//可以修改慢查询时间


构建大表->大表中记录有要求, 记录是不同才有用,否则测试效果和真实的相差大.


创建:
CREATE TABLE dept( /*部门表*/
deptno MEDIUMINT   UNSIGNED  NOT NULL  DEFAULT 0,  /*编号*/
dname VARCHAR(20)  NOT NULL  DEFAULT "", /*名称*/
loc VARCHAR(13) NOT NULL DEFAULT "" /*地点*/
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;




CREATE TABLE emp
(empno  MEDIUMINT UNSIGNED  NOT NULL  DEFAULT 0, /*编号*/
ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/
job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/
mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上级编号*/
hiredate DATE NOT NULL,/*入职时间*/
sal DECIMAL(7,2)  NOT NULL,/*薪水*/
comm DECIMAL(7,2) NOT NULL,/*红利*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/
)ENGINE=MyISAM DEFAULT CHARSET=utf8 ;




CREATE TABLE salgrade
(
grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
losal DECIMAL(17,2)  NOT NULL,
hisal DECIMAL(17,2)  NOT NULL
)ENGINE=MyISAM DEFAULT CHARSET=utf8;


测试数据


INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);


为了存储过程能够正常执行,我们需要把命令执行结束符修改
delimiter $$

#这里我创建了一个函数. 
create function rand_string(n INT) 
returns varchar(255) #该函数会返回一个字符串
begin 
 declare chars_str varchar(100) default
   'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
 declare return_str varchar(255) default '';
 declare i int default 0;
 while i < n do 
   set return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));
   set i = i + 1;
   end while;
  return return_str;
  end $$
#这里我们又自定了一个函数
create function rand_num( )
returns int(5)
begin 
 declare i int default 0;
 set i = floor(10+rand()*500);
return i;
  end $$




*******如果报错 mysql> set global log_bin_trust_function_creators=1;

创建一个存储过程
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 $$


#调用刚刚写好的函数, 1800000条记录,从100001号开始
call insert_emp(100001,4000000);


在默认情况下,我们的mysql不会记录慢查询,需要在启动mysql时候,指定记录慢查询才可以

bin\mysqld.exe - -safe-mode  - -slow-query-log [mysql5.5 可以在my.ini指定]

修改配置

[mysqld]
log-slow-queries = e:/wamp/bin/mysql/mysql5.5.24/data/mysqlslowquery.log
long_query_time = 1


bin\mysqld.exe log-slow-queries=d:/abc.log [低版本mysql5.0可以在my.ini指定]

 

 

先关闭mysql,再启动如果启用了慢查询日志,默认把这个文件放在

my.ini 文件中记录的位置

#Path to the database root

datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/Data/"






原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 五个月的宝宝拉肚子还拉水怎么办 4岁宝宝拉肚子怎么办拉水样 刚出生的婴儿呕奶怎么办 8岁儿童腹泻呕吐怎么办 一岁宝宝呕吐腹泻怎么办 5岁儿童腹泻呕吐怎么办 4岁宝宝呕吐腹泻怎么办 7岁儿童腹泻呕吐怎么办 一个月婴儿呕奶怎么办 一个月婴儿呕奶严重怎么办 6岁宝宝大便干燥怎么办 3岁儿童干咳嗽怎么办 3岁宝宝一直咳嗽怎么办 3岁宝宝风寒咳嗽怎么办 刚出生的宝宝拉奶瓣怎么办 小孩拉痢疾带血怎么办 2岁宝宝有点拉稀怎么办 1岁宝宝有点拉稀怎么办 3岁宝宝有点拉稀怎么办 甲减粘液性水肿怎么办 五个月宝宝断奶不吃奶粉怎么办 八个半月的宝宝不爱吃饭怎么办 十个半月宝宝不爱吃饭怎么办 九个半月宝宝不爱吃饭怎么办 七个半月宝宝不爱吃饭怎么办 8个半月宝宝不爱吃饭怎么办 八个半月宝宝不爱吃饭怎么办 特百惠杯子摔坏后不给换怎么办 特百惠水杯摔裂了怎么办 焖烧杯摔瘪了怎么办 苦瓜和虾一起吃中毒怎么办 乐扣盖子坏了怎么办 小孩上课坐不住好动怎么办 5小孩晚上不睡觉怎么办 一年级的孩子上课好动怎么办 一岁宝宝太好动怎么办 3岁宝宝太好动怎么办 孩子学习注意力不集中怎么办 1岁宝宝皮肤黄怎么办 三岁宝宝太皮怎么办 一岁宝宝太皮了怎么办