文档章节

MYSQL FAQ

王桥修道院副院长
 王桥修道院副院长
发布于 2017/07/31 15:47
字数 963
阅读 8
收藏 0

导出远程sql

本地配置mysql环境变量或者进入mysql/bin目录

导入sql

进入sql所在文件夹,gui bash,-p和password不能有空格

索引

MysqlMYISAM使用的是非聚集索引 索引文件和数据文件分开

innodb使用的是聚集索引 索引和数据在同一个文件 默认以主键为索引

Mysql为什么使用B+ tree作为索引数据结构,而不用hash算法?

  1. hash算法虽然速度快,但是不适合处理范围条件的查询。
  2. hash算法存在指针碰撞问题(散列不均匀会降低查询效率), 在有大量重复键值情况下,哈希索引的效率也是极低的

  3. 哈希索引文件中存放的是哈希算法运算后的值,无法确定key的顺序,所以哈希索引也没办法利用索引完成排序;而B+ tree的叶子节点自动实现了排序

 在 Innodb 存储引擎中,存在两种不同形式的索引,一种是 Cluster 形式的主键索引( Primary Key ),另外一种则是和其他存储引擎(如 MyISAM 存储引擎)存放形式基本相同的普通 B-Tree 索引,这种索引在 Innodb 存储引擎中被称为 Secondary Index 。 在 Primary key中, Leaf Nodes 存放的是表的实际数据,不仅仅包括主键字段的数据,还包括其他字段的数据据以主键值有序的排列。而 Secondary Index 则和其他普通的 B-Tree 索引没有太大的差异,Leaf Nodes 除了存放索引键 的相关信息外,还存放了 Innodb 的主键值。 

      所以,在 Innodb 中如果通过主键来访问数据效率是非常高的,而如果是通过 Secondary Index 来访问数据的话, Innodb 首先通过 Secondary Index 的相关信息,通过相应的索引键检索到 Leaf Node之后,需要再通过 Leaf Node 中存放的主键值再通过主键索引来获取相应的数据行。MyISAM 存储引擎的主键索引和非主键索引差别很小,只不过是主键索引的索引键是一个唯一且非空 的键而已。而且 MyISAM 存储引擎的索引和 Innodb 的 Secondary Index 的存储结构也基本相同,主要的区别只是 MyISAM 存储引擎在 Leaf Nodes 上面出了存放索引键信息之外,再存放能直接定位到 MyISAM 数据文件中相应的数据行的信息(如 Row Number ),但并不会存放主键的键值信息

索引建立原则

  1. 最左前缀匹配原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配
  2. 尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例
  3. 索引列不能参与计算
  4. 尽量的扩展索引(组合索引),不要新建索引

慢查询优化基本步骤

0.先运行看看是否真的很慢,注意设置SQL_NO_CACHE
1.where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高
2.explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询)
3.order by limit 形式的sql语句让排序的表优先查
4.了解业务方使用场景
5.加索引时参照建索引的几大原则
6.观察结果,不符合预期继续从0分析

优化SQL语句

set global log_slow_queries = on;  

set global long_query_time =1;

set global slow_query_log_file= 'e:/slowquery.log';

show global variables like 'long_query_time';

show variables like '%slow%';

 

 

© 著作权归作者所有

共有 人打赏支持
王桥修道院副院长
粉丝 14
博文 47
码字总数 36640
作品 0
宁波
CTO(技术副总裁)
mysql 存储过程 创建

我想知道是不是可以按我下面的这种做法直接创建存储过程。如不行,还有什么比较简便的方法? 这段语句是在Navicat for Mysql 中存储过程中的ddl中 拿到的,创建的存储过程是没有问题的。 现在...

vitou
2012/06/12
1K
1
第 24 章 Web Server

目录 24.1. Apache httpd 24.2. Nginx [root@development httpd-2.2.14]# yum install zlib-devel.x86_64 ./configure --prefix=/usr/local/httpd-2.2.14 --with-mpm=worker --enable-so --e......

玄学酱
01/09
0
0
ubuntu16.04 安装mysql 5.7

参考: http://www.cyberciti.biz/faq/howto-install-mysql-on-ubuntu-linux-16-04/ sudo apt install mysql-server mysql-client 如果提供安全行,可以运行 $sudo mysqlsecureinstallation ......

lieefu
2016/09/19
212
0
LNMP一键安装包是什么?

系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要5GB以上硬盘剩余空间 需要128MB以上内存(如果为128MB的小内存VPS,Xen的需要有SWAP,OpenVZ的至少要有128MB以上的vSWAP或...

bengozhong
2016/10/13
26
0
甲骨文透露对SUN公司各个技术和产品的策略

甲骨文在日前发布的一份FAQ中终于透露了对SUN公司各个技术和产品的策略,其中包括了NetBeans,Glassfish,OpenOffice和VirtualBox等SUN的产品。之前大家关心的MySQL,SPARC和Solaris都已经重...

JavaGG
2009/10/30
796
1

没有更多内容

加载失败,请刷新页面

加载更多

关于Excel表格导出方法--application/vnd.ms-excel

关于Excel表格导出方法--application/vnd.ms-excel 由于本人所做的项目中需要用到两种将JSP页面table导出到Excel表格的方法(老板也是坑爹),一种是在后台操作数据库来实现,比较简单。由于...

DemonsI
22分钟前
1
0
springboot配置读写分离

我不提供内容,我只是好文章的搬运工 https://www.cnblogs.com/wuyoucao/p/9610882.html

颖辉小居
26分钟前
1
0
Spring 传参

spring传参之@RequestParam注解 @RequestParam注解有三个参数分别是: value、 required、 defaultValue 代码: @RequestMapping(value="test1", method = RequestMethod.GET) public String......

休辞醉倒
28分钟前
1
0
go http 框架性能大幅下降原因分析

最近在开发一个web 框架,然后业务方使用过程中,跟我们说,压测qps 上不去,我就很纳闷,httprouter + net/http.httpserver , 性能不可能这么差啊,网上的压测结果都是10w qps 以上,几个m...

鼎铭
28分钟前
7
0
GCC编译过程记

GCC编译过程记 一、引言 对于编程工作者来说,GCC是一个熟悉的名字,它的全称是“GNU Compiler Collection”。GCC是一组编译器集合,目前其支持C、C++、Objective-C、Objective-C++、Go和RBI...

珲少
30分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部