|
de);
*注意:innodb类型的表支持外键,myisam类型的表,虽能创建外键可以成功,但是不起作用,主要原因是不支持外键。
六:MySQL中help的使用
在MySQL中有很多命令如果不记得,要使用MySQL的提示下的操作也就是 ?:
1:?% 可以获得多有的MySQL里面的命令,这个事最多的,建议不使用下面
2:?create
3:?opti% 以为记不住optimize的全称,这个时候可以用%来代替
4:?reg% 获取了记不住的regexp的用法
5:? contents; 查看所有帮助信息 -> 可以得到所有的帮助大纲,通过这个目录在用?继续往下细查
比如:?contents;
? functions; 查看所有的函数,就是?contents得出来的functions
? string funtions; .......
===============================================================================================================================
3.SQL语句优化
一:优化SQL语句的一般步骤
1:通过show status命令了解各种SQL的执行频率
格式:show session|global status;
session:(默认)表示当前连接
global:表示自数据库启动至今
show status;
show global status;
show status like 'Com_%'; --一般只差以Com开头的东西
show global status like 'Com_%';
重点跟踪这几个值(登入以来,所有的操作都会有记载):
show status like "Com_insert%"; --查看到:总共插了多少条 insert_select方式插入使用了几次
show status like "Com_select%"; --登入以来,插入了几次
show status like "Com_update%";
show status like "Com_delete%";
只针对于innoDB存储引擎的(记载的是影响行数):
SQL:show status like "innodb_rows%"; --就可以查看到下面的内容
InnoDB_rows_read执行select操作的次数
InnoDB_rows_updated执行update操作的次数
InnoDB_rows_inserted执行insert操作的次数
InnoDB_rows_deleted执行delete操作的次数
其他:
sql: show status like "connections";
connections 链接MySQL的数量(包括你链接成功或不成功都会记载)
Uptime 服务器已经工作的秒伤
Slow_queries 慢查询次数
show variables like "%slow%"; 查看是否开启慢查询 OFF关闭(默认慢查询文件等详细信息)
show variables like "%long%"; 查看默认慢查询的时间默认是10s
*2:定位执行效率较低的语句(解析sql)
可以查出:有没有用索引啊 单表查还是多表查 还是嵌套查询啊。。。,看这几个值既能分析出来
*重点查看的是 row:8 影响行数
ref:null 如果你表建立的所有,ref会推荐你使用什么索引
explain select * from tables where id=10 \G; 可以用 \G排下
desc select * from tables where id=10;
二:索引问题
索引是数据库优化中最常见也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的SQL性能问题。
1:索引的存储分类
MyISam存储引擎的表的数据和索引是自动分开存储的,各自是独立的一个文件(3个文件 frm-表结构文件 d-数据文件 i-索引文件)
InnoDB存储引擎的表数据和索引是存储在同一个表空间里面的,但可以有多个文件组成(默认是共享表空间,所以是同一个文件)
MySQL目前不支持函数索引,但是能对列的前面某一部分进行索引,例如name字段,可以只取name的前4个字符进行索引,
这个特性可以大大缩小索引文件的大小,用户在设计表结构的时候也可以对文本列根据此特性进行灵活设计。
SQL:create index ind_company2_name on company(name(4));--其中company表名ind_company2_name索引名 且 针对name4个字符进行索引
2:MySQL如何使用索引
索引用于快速查找在某个列中有一特定值的行。对相关列使用索引是提高select操作性能的最佳途径。
一:使用索引:
(1):对于创建的多列索引,只要查询的条件中用到左边的列,索引一般就会被使用。
如下创建个复合索引:
create index ind_sales2_com_mon on sales2(commpany_id,moneys);
能后按company_id进行查询,发现使用到了复合索引
explain select * from sales2 where commpany_id=100 \G;
使用下面的查询就没有使用到复合索引
explain select * from sales2 where moneys=1 \G;
(2):like使用索引要注意,有时候用不上看你like是怎么写的,%号放后面就可以用上索引
索引什么时候用不上(已经建了索引sql时候没用上)
使用like的查询,后面如果是常量并且只有%号不在第一个字符,索引才可能会被使用,如下:
explain select * from commpany2 where name like "%3%" \G; --没用上
explain select * from commpany2 where name like "3%%" \G; --用上啦
(3):如果对大额文本进行搜索,使用全文索引而不使用like"%...%";
(4):如果列名是索引,使用column_name is null将使用索引,如下:
explain select * from commpany2 where name is nul |