mysql 表复制
mysql>create table t3 like t1(这是负责的表结构)
mysql>insert into t3 select*from t1;(*可以取代具体字段)
mysql索引
创建索引
普通索引 alter table table_name add index index_name(column_list)
唯一索引 alter table table_name add unique un_name(column_list)
主键索引 alter table table_name add primary key (column_list)
查看索引 show index from t1
删除普通索引 ALTER TABLE table_name drop index index_name(索引名)根据索引名来删除普通索引和唯一索引 如果索引名是唯一索引则删除的是唯一索引
如果是主键递增索引想要删除主键索引需要先删除递增在去删除主键索引
alter table t1 modify id(主键递增列) int unsigned not null(unsigned代表无符号位 将数据扩大了两倍)
删除主键索引 alter table table_name drop primary key
视图 存在于临时缓存区 他随着主表的变化而变化 因为每次查询视图的时候视图都会查询一次主表
create view v_t1 as select * from t1 where id>4 and id<11
删除视图 drop view v_t1
修改表的存储引擎alter table t1 engine=innodb
mysql事务 先关闭自动提交set autocommit=0;
从表t1中删除了一条记录
delete from t1 where id=11;
此时做一个p1的还原点
savepoint p1
再从表t1中删除一条记录
delete from t1 where id=10
再次做一个p2还原点
savepoint p2 此时恢复到p1还原点 p2的还原点会自动失效 rollback to p1
rollback;还原
如果commit之后在rollback会毫无意义
->
通过慢查询日志(需要开启)来增加索引 慢查询日志会推荐你使用什么索引
desc select * from t1 定位分析执行效率的的sql语句 看哪里需要增加索引(一般加在where order by group by后面的字段)
myisam存储引擎在磁盘中存储的是三个文件 数据文件和结构文件还有索引文件
innodb存储引擎中的数据和索引是放在一个表中 但可以由多个文件组成
通过索引来增加查询速度的原理是减小影响行数
使用and或者or前后的字段都要增加索引如果有一个字段没有索引即使另外一个字段有索引则另外一个索引字段也起不到作用
在导入数据前先关闭唯一索引和自动提交会提高导入效率 导入完成后在打开
insert into table values (value1"),('value2'),('value3')尽量使用多个值表的insert语句 这样可以大大缩短客户与数据库的连接 关闭等损耗
如果查询包含group by 但用户想要避免排序结果带来的损耗 则可以使用order by null来禁止排序例如
select * from zt_score GROUP BY score会以分数分组 并且分数会从小到大排序 如果order by null 则不会在排序
嵌套查询的外面部分用不到索引 里面的能用到例如 desc select * from sales where company_id not in (select id from company2)\G
索引尽量用join来代替嵌套查询
通过拆分表来提高表的访问效率 节省cpu资源
使用中间表提高统计查询速度 一般用到的是视图 不用创建第三张表 因为第三张表不会及时更新主表的数据变化
varchar类型 名字字段30就行了
mysql服务器优化
myisam读锁表
lock table t1 read 读锁表对我们在做备份大量数据时非常有用
mysqldump -uroot -p123 test>test.sql
备份数据
mysqldump -uroot -proot test -l -F'tmp/test.sql'
-l是对每个表加锁
写锁只有本人能够进行增删改查 其他人都不能进行包括查 读锁是别人只能读不能进行增删改 包括自己
解锁unlock tables;
写锁lock table t1 write
四种字符集 服务器字符集 数据库字符集 客户端字符集 连接字符集 (连接数据库)都是utf8
utf-8 general-ci是对你的数字和英文字母排序用的
mysql服务器优化 四种字符集问题
binary log 日志问题 日志中会记录成每一行数据被修改的情况
slow log慢查询日志 记录执行比较慢查询的日志 也就是sql语句
socket 问题 指的是端口
root密码丢失
mysql 主从复制 查在从表中 增删改在主表中