(1) mysql 应该至少满足3NF
(2)sql语句一共有四类
ddl(数据定义语言):create,alter,drop
dml(数据操作语言):insert,delete,update
dtl(数据事务语言):commit,rollback,savepoint
dcl(数据控制语言):grant,revoke
(3) show status : 显示你的mysql数据库当前状态
(4) show status like 'Com%' <=> show session status like 'Com%' 显示当前控制台情况
show global status like 'Com%' 显示当前数据库从启动到现在的执行次数
connections:连接mysql次数 show status like 'Connections'
uptime:启动时间 show status like 'uptime'
slow_queries: 显示慢查询时间(默认10s)
(5)查看慢查询的时间
show variables like 'long_query_time'
(6)delimiter $$ 定义新的命令结束符号
mysql 自定义语句:create function xxx()
mysql 删除自定义函数:drop function xxx()
(7)如何在一个项目中,找到慢查询select,mysql支持把慢查询语句记录到日志中(默认情况不启用)
(一) .frm 表结构 (二)*.myd 数据 (三)*.myi索引
添加主键索引 eg:alter table emp add primary key(empno) 代价:索引空间变大
删除主键索引 eg:alter table emp drop peimary key
索引:加快查询速度,但是牺牲dml语句速度 索引信息存在*.myi文件中
(8) explain分析工具对sql语句进行分析,可以预测sql执行效率,加了索引不进行全表扫描
possible_key:可能用到的索引
key:实际索引
row:从....行得出的(检索n条记录取出的)
extra:查询细节信息
(9)在什么列上加索引比较合适
(一)较频繁的查询条件应该创建索引
(二) 唯一性太差字段不适合加索引
(三) 内容经常变化,不适合加索引
(10) 索引的种类
主索引:主键自动为主索引(primary)把某列设为主键
唯一索引:unique[即改列具有唯一性,又是索引]
全文索引:只有myisam指出fulltext
index:普通索引
符合索引:create index xx on 表名 (列1,列2)
(11)如何创建索引
1,unqiue/fulltext
create [unique][fulltext] index 索引名 on 表名 (列名)
alter table xxx add index 索引名 列名
如果添加主键索引 create table add primary key (列名)
删除索引
1,drop index 索引名 on 表名
2,alter table 表名 drop index 索引名
alter table 表名 drop primary key
(12) 索引的使用
1,对于创建多列索引,只要查询条件使用了最左边的列,索引就会被使用
2,对于使用like 查询,如果是'%aaa' 不会使用索引,'aaa%' 会使用索引
(13)下列条件不会使用索引
1,如果条件有or,即使其中有条件呆索引也不会使用
2,对于多列索引,不是使用第一部分,则不会使用索引
3,如果列类型为字符串,那一定要在条件中将数据使用用引号引起来,否则不会使用索引
4,like 查询以%开头
5,如果mysql 使用全表扫描比使用索引快,则不需创建索引
(14) 查看索引使用情况
show status like 'Handle_read%'
1, handle_read_key:索引查询次数,这个值越高越好
2,handle_read_rnd_next:这个值越高查询越低效
(15)myisam和innodb区别
1,myisam 不支持外键,innodb支持
2,myisam 不支持事务
3,对于数据信息存储的处理方式不同(如果存储引擎是myisam,则创建一张表,对于三个文件。如果innodb则只有一个文件,*,frm数据存放在idata里)
4,对于myisam 数据库需要定时清理,optimize table
(16) 常见的mysql 优化方法
1,使用oreder by null 禁止排序(不需要排序的时候)
2,在精度要求高的应用中使用定点数,decimal
3,日期类型,满足应用最小存贮的早期类型