关于MySQL优化

常见的MySQL基本优化方法,由于对数据库方面开发经验较少,所以自己收集一些资料,这里主要是针对索引的一些基本操作。

show命令一些简单用法

1、show status like 'uptime' mysql启动的总时间

2、show status like 'com_select[delete,insert]'  当前查询连接数,删除,添加

3、show status like 'connections' 连接数

4、show status like 'show_queries' 慢查询次数

5、show variables like 'long_query_time' 当前慢查询时间 默认是 10秒,超过10秒被认为是慢查询

set long_query_time = 1 修改慢查询时间,超过1秒被认为是慢查询

慢查询不只是针对查询,添加也会被记录

delimiter $  作用:将mysql结束符';'换成自定义的符号 这里换成了 '$',一般在写存储过程的时候换成 '$',写存储过程会用到

关于慢日志

如果出现了慢查询,这里如果查询速度超过1秒,就会统计

如何将慢查询的sql语句记录到我们的日志中去,配置如下:

注意:在默认情况下,mysql是不记录慢查询,需要在启动mysql时候指定记录慢查询

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

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

如果启动了慢查询日志,日志默认记录到配置文件 datadir=目录

索引优化

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 ''

);

添加主键 id

alter table bbb add primary key (id);

1.2普通索引

一般来说,先创建表再创建普通索引

例子:

create table ccc(

id int unsigned,

name varchar(32);

);

create index 索引名 on 表名 (列名)

1.3全文索引

使用场景:主要是针对文本的检索,比如文章,全文索引只对MyISAM有效

例子:

create table articles(

id int unsigned primary key auto_increment,

title varchar(200) not null default '',

body text,

fulltext (title,body)

)engine=myisam charset utf8;

insert into articles (title,body) values

('mysql tutorial','DBMS stands for DataBase...'),

('How To Use MySQL Well','AFlter you went through a ...'),

('Optimizing MySQL','In this tutorial we will show ...'),

('1001 MySQL Tricks','1. Nerver run mysqld as root. 2. ...'),

('MySQL vs. YourSQL','In the following database comparison ...'),

('MySQL Security','When confiqured properly,MySQL ...');

使用全文索引:

错误用法:

select * from articles body like '%mysql%'; //不会使用全文索引

证明:

explain select * from articles where body like '%mysql%';

正确用法:

select * from articles where match(title,body) against('database');

说明:

1、再mysql中 fulltext索引只针对 myisam生效

2、mysql自己提供的fulltext只针对英文字母生效->sphinx(coreseek) 处理中文索引

3、使用方法 match(字段名,字段名...) against('关键字');

4、全文索引有一个叫停止词,在一个文本中创建索引是一个无穷大的数,因此对一些常用的词和字符,就不会去创建,这些词成为,停止词

1.4唯一索引

当表的某列被指定为unique约束时,那么这一列就是一个唯一索引

例子:

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

name列就是一个唯一索引

name列是否可以为空null 可以为空而且可以多个,其余的不能重复,包括''空字符串

主键字段,不可以为空null,并且不可以重复

先创建表,再指定唯一索引:

create table eee(id int primary key auto_increment, name varchar(32));

create unique index 索引名 on 表名 (列名);

2、查询索引

Desc 表名 [缺点:不能够查询索引名]

show index(ex) from 表名

show keys from 表名  和上面一样

3、删除索引

alter table 表名 drop index 索引名

删除主键索引 alter table 表名 drop primary key;

4、索引使用注意事项:

索引付出代价,磁盘占用

对 增、删、改 速度会变慢,因为要修改索引中的数据

哪些列适合添加索引:

较频繁作为查询条件

该字段内容有多个,不是唯一的几个

字段内容更新不要太频繁

比如,编号,id

不适合创建索引:

唯一性太差的字段,比如 性别字段,

更新频率非常频繁的字段

不会出现在where子句中的字段

使用索引:

1、对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用

2、对于使用like的查询,查询如果是 '%aaa' 不会使用索引  'aaa%'会使用索引

3、如果条件中有 or ,即使其中有条件带索引也不会使用

4、对于多列索引,不是使用的第一部分,则不会使用索引

5、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。(添加时,字符串必然)

如何选择mysql存储引擎:

myisam: 如果表对事务(回滚)要求不高,同时是以查询为主,考虑使用myisam

比如 bbs中的发帖表,回复表

查询速度较快

支持全文索引

锁表机制

不支持外键

InnoDB: 对事务要求高,保存的数据都是重要数据,我们建议使用InnoDB

比如 订单表,账户表

查询速度较慢

不支持全文索引

行锁机制

支持外键

Memory: 比如我们数据变化非常频繁,不需要入库,同时频繁查询和修改,考虑使用Memory引擎

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容