mysql优化
文章平均质量分 67
freedomai
这个作者很懒,什么都没留下…
展开
-
多列索引实验
多列索引经典题目:http://www.zixue.it/thread-9218-1-4.html假设某个表有一个联合索引(c1,c2,c3,c4)一下——只能使用该联合索引的c1,c2,c3部分A where c1=x and c2=x and c4>x and c3=x B where c1=x and c2=x and c4=x order by c3C wher原创 2015-04-18 19:42:32 · 340 阅读 · 0 评论 -
explain分析sql效果
explain的列分析id: 代表select 语句的编号, 如果是连接查询,表之间是平等关系, select 编号都是1,从1开始. 如果某select中有子查询,则编号递增.explain select goods_id,goods_name from goods where goods_id in (select goods_id from goods where cat原创 2015-04-14 23:17:46 · 851 阅读 · 1 评论 -
事务
事务的4个特性:ACID原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)以银行汇款为例,张三给李四转款300元.原子性: 是指某几句sql的影响,要么都发生,要么都不发生. 即:张三减300, 李四+300 , insert银行流水, 这3个操作,必须都完成,或都不产生效果.原创 2015-04-20 23:56:48 · 427 阅读 · 0 评论 -
巧用变量减少查询
1:用变量排名例: 以ecshop中的商品表为例,计算每个栏目下的商品数,并按商品数排名.select cat_id,count(*) as cnt from goods group by cat_id order by cnt desc;并按商品数计算这些栏目的名次set @curr_cnt := 0,@prev_cnt := 0, @rank := 0;select ca原创 2015-04-26 20:14:15 · 465 阅读 · 0 评论 -
26-binlog-format的区别
主服务器的日志格式用哪种好?有 statement,row, mixed3种,其中mixed是指前2种的混合.以insert into xxtable values (x,y,z)为例, 影响: 1行,且为新增1行, 对于其他行没有影响. 这个情况,用row格式,直接复制磁盘上1行的新增变化.以update xxtable set age=21 where n原创 2015-05-16 00:01:33 · 332 阅读 · 0 评论 -
MySQL主从集群配置
数据库复制 replication 的实现原理1:主服务器凡运行语句,都产生一个二进制日志 binlog2:从服务器不断读取主服务器的binlog3:从主服务读取到的binlog,转换为自身可执行的relaylog,4:执行relaylog实现步骤:1:首先确保主服务器打开二进制日志功能.这样,主服务器一旦有数据变化,立即产生二进制日志.2:从服务器原创 2015-05-14 23:45:32 · 537 阅读 · 0 评论 -
被动主主复制
被动模式下的主主复制是指 2台服务器地位一样, 但其中一台为只读,并且业务中也只写某1台服务器.好处: 如果供写入的服务器出了故障,能迅速的切换到从服务器,或者出于检修等目的,把写入功能切换到另一台服务器也比较方便.拥有从服务器的主主复制,在实际应用中也很多.原创 2015-05-16 13:58:47 · 869 阅读 · 0 评论 -
主主复制-主主复制时的主键冲突解决
大致思路:1: 2台服务器都设置上二进制日志和relay日志2: 都设置上replcation账号3: 都设置对方为自己的masterPS:原理跟主从复制的配置步骤一样,两台主主服务器都需要配置主从相关的配置信息主主复制下一定要注意避免的问题---------同步冲突例:create table stu (id int primary key auto_原创 2015-05-16 13:17:27 · 1102 阅读 · 0 评论 -
30-mysql-proxy完成负载均衡与读写分离
MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡下载安装mysql_proxy:http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.原创 2015-05-16 18:10:29 · 855 阅读 · 0 评论 -
索引碎片修复
索引碎片与维护在长期的数据更改过程中, 索引文件和数据文件,都将产生空洞,形成碎片.我们可以通过一个nop操作(不产生对数据实质影响的操作), 来修改表.比如: 表的引擎为innodb , 可以 alter table xxx engine innodboptimize table 表名 ,也可以修复.注意: 修复表的数据及索引碎片,就会把所有的数据文件重新整理原创 2015-04-19 17:36:55 · 577 阅读 · 0 评论 -
大数据量分页优化--延迟查询
延迟关联select * from it_area where name like '%东山%';+------+-----------+------+| id | name | pid |+------+-----------+------+| 757 | 东山区 | 751 || 1322 | 东山县 | 1314 || 2118 | 东山区 | 2原创 2015-04-19 16:56:36 · 1109 阅读 · 0 评论 -
聚簇索引
聚簇索引与非聚簇索引Myisam与innodb引擎,索引文件的异同innodb的主索引文件上 直接存放该行数据,称为聚簇索引,次索引指向对主键的引用myisam中, 主索引和次索引,都指向物理行(磁盘位置).PS:比如一个表id为主键,name为普通索引,where id = x and name='x'innodb会先查找主键(id)的位置,然后再查找普通索引(n原创 2015-04-19 05:55:06 · 636 阅读 · 0 评论 -
索引覆盖
索引覆盖:索引覆盖是指 如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据.这种查询速度非常快,称为”索引覆盖”例如:select id from table where id = x //查询返回的数据跟索引一致回行:指查询数据从磁盘上返回原创 2015-04-19 06:59:06 · 438 阅读 · 0 评论 -
伪哈希函数降低索引长度
对于左前缀不易区分的列 ,建立索引的技巧如 url列http://www.baidu.comhttp://www.zixue.it列的前11个字符都是一样的,不易区分, 可以用如下2个办法来解决1: 把列内容倒过来存储,并建立索引 Moc.udiab.www//:ptthTi.euxiz.www//://ptth这样左前缀区分度大,2: 伪h原创 2015-04-19 15:19:21 · 814 阅读 · 0 评论 -
索引长度与区分度
1:查询频繁 2:区分度高 3:长度小 4: 尽量能覆盖常用查询字段.1: 索引长度直接影响索引文件的大小,影响增删改的速度,并间接影响查询速度(占用内存多).针对列中的值,从左往右截取部分,来建索引1: 截的越短, 重复度越高,区分度越小, 索引效果越不好2: 截的越长, 重复度越低,区分度越高, 索引效果越好,但带来的影响也越大--增删改变慢,并间影响查原创 2015-04-19 14:52:34 · 8239 阅读 · 1 评论 -
索引与排序
索引与排序排序可能发生2种情况:1: 对于覆盖索引,直接在索引上查询时,就是有顺序的, using index2: 先取出数据,形成临时表做filesort(文件排序,但文件可能在磁盘上,也可能在内存中)我们的争取目标-----取出来的数据本身就是有序的! 利用索引来排序.(尽量不要出现filesort)比如: goods商品表, (cat_id,shop_pr原创 2015-04-19 17:23:11 · 1260 阅读 · 0 评论 -
in型子查询陷阱
in 型子查询引出的陷阱题: 在ecshop商城表中,查询6号栏目的商品, (注,6号是一个大栏目)最直观的: mysql> select goods_id,cat_id,goods_name from goods where cat_id in (selectcat_id from ecs_category where parent_id=6);误区: 给我们的感觉是,原创 2015-04-19 18:10:35 · 1893 阅读 · 0 评论 -
列选取原则
表的优化:1: 定长与变长分离如 id int, 占4个字节, char(4) 占4个字符长度,也是定长, time 即每一单元值占的字节是固定的.核心且常用字段,宜建成定长,放在一张表.而varchar, text,blob,这种变长字段,适合单放一张表, 用主键与核心表关联起来.2:常用字段和不常用字段要分离.需要结合网站具体的业务来分析,分析字原创 2015-04-12 21:09:38 · 324 阅读 · 0 评论 -
Awk脚本
Awk是一个简便的直译式的文本处理工具.擅长处理--多行多列的数据Awk在这里的作用是:收集Mysql服务器每个时刻的状态值,并将收集的状态值记录到文本中,作为判断服务器性能分析的数据处理过程: While(还有下一行) {1:读取下一行,并把下一行赋给$0,各列赋给$1,$2...$N变量 2: 用指定的命令来处理该行}注:$0表示行原创 2015-04-12 20:53:45 · 274 阅读 · 0 评论 -
partition分区
应用情境:当一张表的数据非常多的时候,比如单个.myd文件都达到10G, 这时,必然读取起来效率降低.可不可以把表的数据分开在几张表上?1: 从业务角度可以解决. (分表)比如, 通过id%10 , user0 , user1....user9, 这10张表根据不同的余数,来插入或查询某张表.2: 通过mysql的分区功能mysql将会根据指定的规则,把原创 2015-05-17 10:47:01 · 385 阅读 · 0 评论