mysql设计-优化

mysql表复制

1.复制表结构
create table student like user;
2.复制表内容
insert into t3 select * from t1;

mysql索引

1.查看索引
show index from user\G

2.普通索引
1)创建
create index i_age on user(age);
2)删除
drop index i_age on user;
3.唯一索引
1)create unique index u_username on user(username);
2)drop index u_username on user;
4.主键索引
--去除auto_increment 主键不能modify
alter table user modify id int unsigned;
1)创建(要自增必须主键)
alter table table_name add primary key (column_list)
2)删除
alter table table_name drop index index_name
alter table table_name drop primary key

mysql视图

视图相当于截图 会随着表变化而变化 没有存储任何数据
1.创建
create view userclass as select user.username,user.age,class.name from user,class where user.class_id=class.id;
2.删除
drop view userclass;
3.查看
show tables ;
4.
select * from userclass;

mysql查看表中未来的自增数
show create table user;

mysql内置函数

1.mysql字符串函数
CONCAT(string [,...]) //连接字符串
LCASE(string2) //转换成小写
UCASE(string2) //转换成大写
LENGTH(string) //string长度
LTRIM(string2) //去除前端空格
RTRIM(string2) //去除后端空格
REPEAT(string2,count) //重复count次
REAPEAT(str,search_str,replace_str) //在str中用replace_str替换search_str
SUBSTRING(str,position,[,length]) //position开始 取length个字符
SPACE(count) //生成count个空格

2.数学函数
bin() //把某一个数转换为二进制
ceiling() //取上一个整数
floor() //取下一个整数
select floor(10.5);

max() //取最大整数
select max(id) from user;

min() //取最小整数
sqrt() //平方根
rand() //随机数

3.日期函数
curdate()
curtime()
now()
unix_timestamp()
from_unixtime()
week(date)
year(date)
datediff()

mysql

sql语句优化
1)优化SQL语句的一般步骤
2)索引优化
3)check与optimize使用方法
4)常用sql优化
检查服务器增删查改使用频次 自启动以来
show status like "%InnoDB_rows%";

通过show status命令了解各种sql执行效率
格式:show[session|global]status;
session(默认)表示当前连接
global表示自数据库启动至今
show status;
show global status;
show status like 'Com_%';
show global status like 'Com_%';

定位执行效率较低的sql语句
1.explain或desc定位一条sql语句的影响行数
desc select * from user where id=1\G
desc select * from user where username='weizai'\G

mysql慢查询

1.查看慢查询次数
show status like "%quer%";
Slow_queries | 0

2.修改慢查询时间(my.ini)
long_query_time=6

show variables like "%query%";
附录:批量插入数万条测试数据(存储过程)
mysql> delimiter $$
mysql> create procedure ptest()
-> begin
-> declare pid int ;
-> set pid = 1000000;
-> while pid>0 do
-> insert into ...... --插入语句
-> set pid = pid-1;
-> end while;
-> end $$
mysql> delimiter ;
mysql> call myFunction();//调用存储过程

优化表空间:

1.optimize table sales;
1).myisam表没有问题
2).innodb表ibdata1文件无法回收空间

索引

create index ind_company2_name on company2(name(4))
索引的存储分类
1).myisam
2).innodb

索引用于快速找出某个列中有特定值的行 对相关列使用索引是提高select操作性能的最佳途径
1.使用索引
1)对于创建的多列索引 只要查询的条件中用到最左边的列
索引一般会被使用

如下复合索引(比较少)
create index ind_sales2_com_mon on sales2(company_id,moneys);
然后按照company_id进行查询 发现使用了复合索引
explain select * from sales2 where company_id=2006\G
使用下面的查询就没有使用到复合索引
explain select * from sales2 where moneys=1\G

2)like关键词
当使用like进行搜索时 %在前索引可能会失效
desc select * from student_big where username like '%inux%'\G
desc select * from student_big where username like 'linux%'\G

3)如果对大的文本进行搜索 使用全文索引而不使用like % %

4)如果列名是索引 使用column_name is null将使用索引

posted @ 2018-04-28 09:07  WWSASUKE  阅读(189)  评论(0编辑  收藏  举报