MySQL随手记
一、MySQL数据迁移(由远端主机迁移到本地)
1、导出数据库
mysqldump -u root -p db > dump_db_date.sql
root: 账户
db: 需要导出的数据库名
2、将导出的dump_db_date.sql文件scp到本地
3、在本地机器建立新数据库
mysql > create database new_db;
4、导入数据
mysql -u root -p new_db < dump_db_date.sql
二、索引
InnoDB引擎本质上是一种B+树结构。传送门:从B树、B+树、B*树谈到R 树。
1、聚簇索引
聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。索引的顺序就是数据存放的顺序,所以,很容易理解,一张数据表只能有一个聚簇索引。
聚簇索引要比非聚簇索引查询效率高很多,特别是范围查询的时候。具体细节依赖于其实现方式,InnoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。

主键的顺序就是实际数据存放的顺序。因此,按主键进行范围查询的时候,效率会高很多。
2、查询效率?
假设有张表有2个索引,主键作为聚簇索引,还有一个二级索引。聚簇索引的B+树高度为h1,二级索引的B+树高度为h2。
那么通过主键来查询,时间复杂度为O(h1);通过二级索引来查询,时间复杂度为O(h1+h2)。原因在于,在InnoDB引擎中,二级索引的叶子节点中存储的不是行指针,而是主键值。
这样做的好处是当移动行的时候无须更新二级索引中的指针,减少了行移动或者数据页分裂时的维护工作。
3、采用自增类型还是uuid作为主键?
自增类型作为主键的好处:一是长度短,节省空间,尤其是在表中有很多二级索引的情况下;二是索引顺序和实际数据存放顺序一致,insert操作总是插入到索引的最后,和uuid相比,避免了大量的为新的行寻找合适位置插入以及频繁的页分裂操作。既节省空间又速度快。
自增作为主键的坏处:对于高并发工作负载,瞬时插入大量数据,会造成明显的锁竞争,而uuid则不存在这样的问题。另外,在分布式架构中,采用自增作为主键有个主键全局唯一性问题(uuid也有极小概率会冲突)。
4、使用索引扫描来做排序的条件
1)只有当索引列顺序和order by子句的顺序完全一致,并且所有列的排序方向都一样时;
2)如果查询需要关联多张表,则只有当order by子句引用的字段全部为第一张表时;
3)需要满足索引的最左前缀的要求,除非前导列为常量。
比如:
create table rental(
...
unique key rental_date(rental_date, inventory_id, customer_id),
);
select * from rental order by rental_date, inventory_id; //符合,满足最左前缀要求
select * from rental where rental_date='2016-10-30' order by inventory_id, customer_id; //符合,前导列为常量
select * from rental order by rental_date, customer_id; //不符合,不满足最左前缀要求
select * from rental where rental_date in ('2016-10-28', '2016-10-30') order by inventory_id; //不符合,前导列为范围
lyhabc的Mysql总结: http://www.cnblogs.com/lyhabc/category/573945.html
MySQL随手记的更多相关文章
- Navicat for MySQL使用手记(上)--创建数据库和表
在管理MySQL数据库的图形化工具中,最为熟知的就是phpMyAdmin和Mysql-Front了,今天跟大家分享另外一个管理mysql数据库的另外一个利器---Navicat MySQL. Navi ...
- Navicat for MySQL使用手记(下)--实现自动备份数据库
五.备份和还原MySQL数据库 在数据库的管理中,备份和还原是必须做认真做的事情,如果疏忽或者做粗糙了,那么一旦数据库故障后果不堪设想,所以Navicat同样也有备份和还原的功能,相比较创建功能,其备 ...
- Navicat for MySQL使用手记
摘要 在管理MySQL数据库的图形化工具中,最为熟知的就是phpMyAdmin和Mysql-Front了,今天跟大家分享另外一个管理mysql数据库的另外一个利器---Navicat MySQL. N ...
- 业界最具影响力MySQL精品文章荟萃(300篇)
MySQL是一种关联数据库管理系统,SQL语言是用于访问数据库的最常用标准化语言.本文档收集的资料有MySQL数据库备份与恢复,配置,解决方案等,供大家方便统一阅读. 博客专题 1 MySQL ...
- linux操作mysql命令快速手记 — 让手指跟上思考的速度(二)
这一篇是<mysql内建命令快速手记>的姐妹篇,废话不再赘述,直接上干货,跟老铁慢慢品 1.mysql -hlocalhost -uroot -proot,-h,-u,-p分别代表ip,u ...
- 【Lamp】 Linux 下安装PHP+Apache+Mysql 手记
[0]写在最前 由于准备实习原因,今天又重温了Lamp的搭建过程,之前一直是看燕十八老师2012年的教程学习,因此今天也是拿了十八哥的lamp搭建笔记作参考.但这次按照笔记重新搭建,发现了很多问题,由 ...
- Mysql 数据库单机多实例部署手记
最近的研发机器需要部署多个环境,包括数据库.为了管理方便考虑将mysql数据库进行隔离,即采用单机多实例部署的方式.找了会资料发现用的人也不是太多,一般的生产环境为了充分发挥机器性能都是单机单 ...
- linux下安装mysql手记
安装mysql 下载mysql-standard-4.1.8-pc-linux-i686.tar.gz文件到目录/usr/local/下 # groupadd mysql //添加mysql用户组 ...
- MySQL命令使用手记
1.登陆 >mysql -u root -p,root没密码按回车. 2.创建数据库 >create database XXX; 3.创建用户 >inse ...
随机推荐
- python入门之文件处理
1.读取文件 f=open(file="C:\BiZhi\新建文本文档.txt",mode="r",encoding="utf-8") da ...
- python之数据库内置方法以及pymysql的使用
一.mysql内置方法 1)视图的概念和用法 .什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可 .为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 .如何用视 ...
- boost-字符编码转换:使用conv
Windows下的字符集转换可以使用WideCharToMultiByte/ MultiByteToWideChar,Linux下字符集转换可以使用iconv()函数,下面为使用boost的conv来 ...
- estimator = KerasClassifier
如何在scikit-learn模型中使用Keras 通过用 KerasClassifier 或 KerasRegressor 类包装Keras模型,可将其用于scikit-learn. 要使用这些包装 ...
- MyGeneration使用概述
1.首先要连接数据库,第一次启动myG的时候会弹出default settings对话框,以后也可以在Edit-default settings里面修改.default settings有3个tabs ...
- 关于在Silverlight中添加图片的问题
在Silverlight中添加图片,目前支持的Image格式有jpg和png两种,如何在目录中添加,有些什么技巧呢? <StackPanel Background="White&quo ...
- 利用tcpcopy引流过程
tcpcopy是一个tcp流量复制工具,当前还支持udp和mysql流量的复制. 目的: 将机器10.24.110.21的5000端口流量引流到机器10.23.25.11的5000端口. 示例:将10 ...
- Android自定义视图三:给自定义视图添加“流畅”的动画
这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...
- android-基础编程-TextView
TextView是简单而又复杂的控件,简单是使用上,复杂是源代码研究.基础编程这里只讲是如何使用. TextView主要分为两种使用方法,一种是xml中不带span的textview,另外一种是Spa ...
- C/C++ 打开串口和关闭串口
通常使用下列函数来通过Win系统来对外围设备进行通信处理: 0. 前言 做串口方面的程序,使用CreateFile打开串口通信端口.在对串口操作之前,需要首先打开串口.使用C++进行串口编程,如果采用 ...