sql之left join、right join、inner join的区别
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下:表A记录如下: 123456aID aNum1 a200501112 a200501123 a200501134 a200501145 a20050115 表B记录如下: 123456bID bName1 20060324012 20060324023 20060324034 20060324048 2006032408 1.left joinsql语句如下: 123select * from Aleft join B on A.aID =...
mysql主从同步原理、配置以及延迟
我们先来了解什么是主从同步,主从同步,顾名思义也称为主从复制,用来建立一个和主数据库完全一样的数据库环境。主从同步使得数据可以从一个数据库服务器复制到其他服务器上,实现主数据库的数据和从数据库的数据保持一致。 集群是共享存储的,是data-sharing . 主从复制中没有任何共享 . 每台机器都是独立且完整的系统,是nothing-sharing. 主从同步的原理 从mysql5.6之后主从复制的实现方式主要有3种: 异步复制 全同步复制 半同步复制 主从同步原理图 1.当主数据库的更新事件(update、insert、delete)被写到binary-log . 2.从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上 .主库创建一个binlog dump thread线程,把binlog的内容发送到从库 ,从库的I/O线程读取主库的输出线程发送的更新并拷贝这些更新到本地relay log文件中 . 3.从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行...
15个对MySQL的优化建议与总结
1、 为查询缓存优化查询 像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,谨慎使用 2、EXPLAIN 我们的SELECT查询(可以查看执行的行数) 可以让我们找到潜在的性能问题 3、当只要一行数据时使用LIMIT 1 MySQL数据库引擎会在查找到一条数据后停止搜索,而不是继续往后查询下一条符合条件的数据记录。 4、为搜索字段建立索引 在识别度高的列上建立正确的索引,以提升性能 5、在Join表的时候使用相当类型的列,并将其索引 关联表的关键字段,类型一致,字符集一致,才能提高性能,否则无法使用它们的索引 6、千万不要 ORDER BY RAND () 执行RAND()函数(很耗CPU时间),会让你的数据库的性能呈指数级的下降 7、 避免SELECT * 从数据库里读出越多的数据,那么查询就会变得越慢。 8、永远为每张表设置一个ID 我们应该为数据库里的每张表都设置一个ID做为其主键,而且最好的是一个INT型的(推荐使用UNSIGNED),并设置上自动增加的 AUTO_INCREMENT标志。 9、可以使用ENUM...
MYSQL千万级数据量的优化方法积累
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num=10 or num=20可以这样查询:select id from t where num=10 union all select id from t where num=20 5.in 和 not in...
mysql中间件-Mycat
前言因业务需要,给mysql做了主备,然后准备使用数据库中间件来进行读写分离和分片。 学习过程学习过程中使用了三台服务器,一主两备,此处只用一主一备参与中间件的试用。 集群组成如下: 角色 主机名 主机IP master liunian1 192.168.1.1 slave liunian2 192.168.1.2 slave liunian3 192.168.1.3 先配置mycat配置文件schema.xml 123456789101112131415161718<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"> ...
Mybatis中SQL的语句总结
建表 查询 简单查询 注意:如果这里不指定parameterType,则默认会识别处理;如果指定了类型,则传入的值就需要和当前指定的类型保持一致,不然就会出现数据类型转换异常。 简单分页查询 left join app_info表和app_verion表分别存储的是应用信息和应用版本信息。现在要根据appId和versionId查出一个应用的具体信息【包括信息信息和版本信息】 批量查询 更新 简单更新 批量更新 有这样一个需求,把 app_info表中id 为1,2,3的app的app_name改为appName1,appName2,appName3;使用 case ..when ..then 这样的语法结构来完成: case...
mysql中间件-Atlas初步试用
前言Atlas是360开源的mysql数据库中间件,主要致力于读写分离,分片等操作,降低数据库与后端耦合性。 踩坑过程下载地址 https://github.com/Qihoo360/Atlas/releases 下载rpm 版本 直接 rpm -i 文件.rpm进行安装即可 安装好之后文件在/usr/local/mysql-proxy文件夹中 配置conf/test.cnf 如下所示: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667[mysql-proxy]#带#号的为非必需的配置项目#模块名称plugins = admin, proxy#管理接口的用户名admin-username = root#管理接口的密码admin-password = password#实现管理接口的Lua脚本所在路径admin-lua-script =...
centos7安装MYSQL及主从同步设置
1. 下载mysql wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz 2. 解压mysqltar -zxvf mysql mysql-5.7.23-linux-glibc2.12-i686.tar.gz 3. 将mysql安装文件移动到系统目录文件夹cp -r mysql/* /usr/local/mysql 4. 安装mysql`bin/mysqld –initialize –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data –lc_messages_dir=/usr/local/mysql/share –lc_messages=en_US`` -...
nginx负载均衡策略
简介nginx负载均衡策略相对来说比较方便配置。 策略有以下几种: 1)、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 12345678910111213141516upstream test { server 10.0.1.31:8080; server 10.0.1.32:8080;} server{ listen 80; server_name www.xxxx.com; location / { proxy_pass http://test; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ...