建表

  1. 每一个表都有一个id字段,最好为UNSIGNED。如 INT(9) UNSIGNED NOT NULL
  2. 在表使用一段时间后,使用PROCEDURE ANALYSE得到建议,如select * from log_table where record_date > “2015-06-01” PROCEDURE ANALYSE (100,1000);
  3. 尽量使用NOT NULL的字段,由于NULL也是占空间的
  4. 将IP存成UNSIGNED INT,SQL中用INET_ATON() 将IP地址转换成整型。使用INET_NTOA()将其还原
  5. 使用固定长度的字段能够节省空间
  6. 字段长度尽可能短,以便优化速度。可是要保证每一个字段有足够的空间以满足需求
  7. 字符串字段:由于mysql默认不区分大写和小写,假设字符串字段作为主键的话。须要将其改成bin类型。如
  1. CREATE TABLE T(
  2. A VARCHAR(10) BINARY
  3. );
  1. 索引:将常常查询的字段创建成一个索引字段
  2. 索引:假设一个字段在key中。尽量将其转换成整数。以加快查询速度。

    比方我们常常查询各个机型的日活,就能够将机型映射成整数存在DB中,以加快查询速度

查询

  1. 想看自己写的查询语句是否充分利用了数据库的索引。能够使用EXPLAIN,使用方法EXPLAIN querySQL
  2. 使用查询缓存,不要使用 NOW() 、 RAND() 等
  3. 假设仅仅须要一条数据的话,使用LIMIT 1
  4. 对搜索的字段建立索引
  5. JOIN时,对连接字段使用同样的数据类型。并对字段建立索引
  6. 不要使用ORDER BY RAND()。由于查询前,该查询会对表中每一行记录都运行RAND()
  7. 查询时尽量指定查询字段。避免使用SELECT *,以提高IO速度

使用

  1. 含有大量数据的DELETE或者INSERT时,使用分片,如DELETE FROM logs WHERE log_date <= ‘2009-10-01’ LIMIT 10000

导出到測试环境

大公司常有生产环境和測试环境,測试环境没法实时同步生产环境的数据,这就须要我们手工进行同步了。

备份到文件

我们不须要将生产环境的数据全量导出到測试环境,仅仅须要满足部分条件的数据,如近期1个星期的数据,或者近期的100条数据

  1. mysqldump -uusername -ppassword -h生产环境节点 数据库 数据表 --where "查询语句" --skip-lock-tables --default-character-set=utf8 --no-create-info --quick > 数据表.sql

导入到測试环境

  1. mysql -u測试用户 -p測试password -h測试节点 数据库名 < Page_Stats.sql

更新

存在则更新,不存在则插入

我们须要定期更新离线数据库,更新时。可能有反复的数据。即已经存在满足唯一性索引的数据。

这个时候,假设直接删除数据库中的数据。可能引出一些BUG。

mysql中有一种插入数据库的写法,假设数据不存在则插入数据,假设存在满足唯一性索引的数据。则更新对应数据

  1. INSERT INTO table (column_1, column_2, column_3) VALUES ('column_1_value', 'column_1_value', 'column_3_value') ON DUPLICATE KEY UPDATE column_1='column_1_value', column_2='column_2_value', column_3='column_3_value';

主键存在则将某个字段的数值添加,不存在则插入

  1. INSERT INTO T(app_id, count) VALUES(10086, 10) ON DUPLICATE KEY UPDATE count = 10 + count"

维护数据

对于有时效性的数据,能够定期清除n天前的数据。

存储优化

假如线上数据库仅仅记录了每一个广告主最新的出价信息。而我们想观察每一个广告主的历史出价信息。那么每分钟记录全部广告主的出价信息的话,数据量将会很大,这个时候,我们就须要对存储进行优化:假设该广告主出价信息没有变化,我们就不须要记录了

数据库表

表:coupon_bid_realtime

字段:coupon bid record_time

唯一索引:coupon record_time

查询全部广告主的近期出价信息

  1. SELECT A.coupon, A.bid, A.record_time FROM coupon_bid_realtime AS A JOIN (SELECT coupon, MAX(record_time) AS record_time FROM coupon_bid_realtime GROUP BY coupon) AS B ON A.coupon = B.coupon AND A.record_time = B.record_time;

过滤没有变化的数据

依据前面查询出来的广告主的出价信息,假设广告主没有变更出价信息,则不插入

參考

  1. Top 20+ MySQL Best Practices

MySQL经常使用技巧的更多相关文章

  1. mysql优化小技巧

    对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引unique.全文索引] c: 分表技术(水平 ...

  2. 【转】mysql索引使用技巧及注意事项

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  3. MYSQL SQL语句技巧初探(一)

    MYSQL SQL语句技巧初探(一) 本文是我最近了解到的sql某些方法()组合实现一些功能的总结以后还会更新: rand与rand(n)实现提取随机行及order by原理的探讨. Bit_and, ...

  4. MySQL 性能优化技巧

    原文地址:MySQL 性能优化技巧 博客地址:http://www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这 ...

  5. MySQL SQL查询优化技巧详解

    MySQL SQL查询优化技巧详解 本文总结了30个mysql千万级大数据SQL查询优化技巧,特别适合大数据里的MYSQL使用. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ...

  6. mysql索引使用技巧及注意事项

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  7. MySQL数据库实用技巧

    1.如何快速掌握MySQL? 培养兴趣 兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率.当然学习MySQL 5.6也不例外.夯实基础 计算机领域的技术非常强调基础,刚开始学习可能还认 ...

  8. Mysql sql语句技巧与优化

    一.常见sql技巧 1.正则表达式的使用 2.巧用RAND()提取随机行 mysql数据库中有一个随机函数rand()是获取一个0-1之间的数,利用这个函数和order by一起能够吧数据随机排序, ...

  9. MySQL 更新语句技巧

    一. 多表更新 1. 数据准备 mysql> mysql> select goods_id, goods_name,goods_cate from tdb_goods; +-------- ...

  10. MySQL 常用SQL技巧和常见问题

    一.巧用正则表达式 二.巧用RAND() 提取随机行 利用rand() 的随机数功能,结合 order by 子句完成随机抽取某些行的功能. 三.利用 group by 的 with rollup 子 ...

随机推荐

  1. centos7.2安装社区版docker-ce-17.06.1

    先yum install安装如下包: container-selinux-2.21-1.el7.noarch libcgroup-0.41-13.el7.x86_64 libtool-ltdl-2.4 ...

  2. Qt通过ODBC连接SQL Server2008实践总结

    Qt连接数据库的方式很多,这里说明一种最常用也是最实用的方式,因为这种方式在Windows上开发程序使用起来非常方便,并且也是远程连接数据库所需要用到的方式. 前提工作: 在Win7下安装了SQL S ...

  3. cocoahttpserver使用具体解释(二)

    接下来,我们接着去学习怎样去接收处理web上传的数据 1 首先我们创建一个 @interface WTZHTTPConnection : HTTPConnection 在这个类中我们用于处理接受文件并 ...

  4. 自己定义构造方法和description方法

    本文文件夹 知识回想 一.自己定义构造方法 二.description方法 说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序猿,可以高速上手Objec ...

  5. Python学习笔记_05:使用Flask+MySQL实现用户登陆注册以及增删查改操作

    前言:本文代码参考自两篇英文博客,具体来源点击文末代码链接中文档说明. (PS:代码运行Python版本为2.7.14) 运行效果: 首页: 注册页面: 登陆界面: 管理员登陆后界面: 添加.删除.修 ...

  6. maven-war-plugin 插件 web.xml 缺失时忽略

    我们很多时候开发Spring MVC 项目时我们完全可以使用Java Bean 和 Annotation 的方式来配置 Spring MVC 的 DispatcherServlet,而不再采用传统的 ...

  7. poi导出excel合并单元格(包括列合并、行合并)

    1 工程所需jar包如下:commons-codec-1.5.jarcommons-logging-1.1.jarlog4j-1.2.13.jarjunit-3.8.1.jarpoi-3.9-2012 ...

  8. Samba共享及自动挂载测试

    要求: 1.在server0服务器上安装配置samba,工作组为STAFF,共享目录/smb1, 共享名smb1,仅允许192.168.100.0/24网段中的主机访问.samba用户user1可以读 ...

  9. phpBB3.1和3.2

    闲逛看到一个帖子, phpBB3的论坛经常被机器人注册攻击, 要找人做拦截. 出于兴趣, 联系了一下. 论坛是一个做健康养老调查的社会机构的, 版本3.1, 十年前我还在更新phpbb中文包的时候, ...

  10. Ubuntu16.04 安装使用KiCad

    KiCad是一个带模拟器的电路设计软件, 官网 http://kicad-pcb.org/, 当前版本是4.0.7 安装 参考http://kicad-pcb.org/download/ubuntu/ ...