MySQL实践总结


1.Mysql表的快速复制

create table new_table select * from old_table
create table new_table like old_table insert new_table select * from old_table 

这两种方法的特点:第一种方法需要手动添加主键、索引等。第二种方法是完全复制,推荐这种方法

此外,如果想从另外表导入数据:

Insert into table1(col1,col2,…) Select col1,  col2,… from table2

2.分页优化

分页在实际的项目中应用的十分广泛, 但是当数据量大时, 其效率问题令人担忧。先看下我们通常采用的分页语句:

Select * from table where …. Order by X limit start, size
Select * from table where …. Order by X limit 10000, 10

随着start的增大,查询的效率越差, 需要进一步优化。

优化的方式主要有两种方式 1:子查询 2:连接查询

Select * from (Select * from table where id>(select id from table order by id desc limit 10000, 1) limit 10) order by id desc

SELECT * FROM table INNER JOIN ( SELECT id FROM table ORDER BY id DESC LIMIT 10000,10) t2 USING (id)

3.排名

用存储过程实现计算某用户的排名

    CREATE  PROCEDURE `calc_ranks `(username varchar(50)
    BEGIN
      SET @username = username;
      PREPARE STMT FRO
     'select CAST(ranking.rank AS SIGNED)
     from (
     select @x := @x + 1 as rank, rd.username, rd.total
     from (   select a.username, a.total
       from table1 a left join table2 b on a.username=b.user_name
       where b.is_active = 1 and b.is_enabled = 1 
       order by a.total desc, b.nick_name asc
      ) rd,  (select @x := 0) r
     ) ranking
     where ranking.username = ?';
      EXECUTE STMT USING @username;
    END

4.MySql 备份

  • 导出整个数据库

    • Mysqldump –u 用户名 –p 密码 数据库名 〉导出的文件名
  • 导出一个表

    • Mysqldump –u 用户名 –p 密码 表名 〉导出的文件名

5.Mysql性能优化最佳实践

  • 为查询缓存优化自己的查询
  • 用explain查看自己的select
  • 只查询一条请使用limit 1
  • 使用ENUM
  • 永远为每个表设置ID
  • 避免select *
  • 为搜索字段加索引
  • 尽量适应not null
  • IP地址存成unsigned int, INET_ATON:将字符串转成整形;INET_NTOA() 把一个整形转成一个字符串IP

参考

  • 高性能MySQL(第3版)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值