- 浏览: 56634 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (117)
- RPC相关 (4)
- mvc_controller (3)
- mvc_model (3)
- maven (4)
- mvc_view (5)
- IO (2)
- 业务相关 (2)
- MQ (7)
- 搜索引擎 (3)
- zookeeper (2)
- 工具相关 (4)
- 编辑错误 (1)
- tomcat (1)
- 单元测试 (1)
- 负载均衡 (1)
- ubuntu (1)
- nginx (1)
- dubbo (2)
- 网络站点分发 (1)
- 电商-支付相关 (10)
- 电商订单业务相关 (3)
- Core java1 (3)
- Core Java (12)
- 多线程高并发(并发包/线程/锁) (10)
- 数据库+缓存 (17)
- springcloud (2)
- jvm (5)
- 日志相关 (1)
- 算法 (3)
- spring (2)
- 分布式一致性算法 (1)
最新评论
http://www.cnblogs.com/gossip/p/9237686.html
一.语句上外部配置优化:
1.1 系统日志有很多语句
慢查询语句
show_query_log = TRUE
show_query_file = /usr/local/mysql/slow_query_log.txt
show_query_time = 3
执行计划器:
EXPLAIN SELECT*FROM t;
explain select*from t;
使用执行计划器,看时间状态,进行判断sql性能好坏:
查询出数据,有字段type,最佳到最差按照排序有如下值(type):
system 最佳的值
const 主键也是索引
eq_ref 链接查询 查询条件是索引
ref
ref_or_null 链接有空值
https://blog.csdn.net/dennis211/article/details/78170079
all 最差的值
最差是all全表查询
索引根据我们数据结构抽取的另外一个隐性数据类型的数据结构,实现了B-Tree
或B+查询算法。
1.2 mysql 5.1以下版本联合索引失效:
如果用联合索引 只用或用到第一个字段(最左边字段)参与查询,联合索引会生效:
如果用联合索引 没有用到第一个字段参与查询,联合索引会失效:
此截图是mysql5.5 虽然慢,但还是使用到了索引,高版本优化了索引。
1.3 mysql 5.1以下版本联合索引失效:or,and
or的情况下两边都是单个索引字段,索引不生效--可以用联合索引。
但是5.6以上版本是生效的-两边都加索引字段提高效率。
--EXPLAIN select *from m_member_table where name='zhangsan' or age= 24
在or的两边(或or的其中一边)都是索引的情况下,失效--可以用联合索引。
5.6以上版本,两边都加索引字段提高效率。
and的情况下(或and的其中一边)单个索引是生效,记住这个坑,and两边有一个或都是索引字段就是生效。
1.4 mysql 5.1以下版本联合索引失效:like
like,正则查询,sphinx斯芬克斯搜索加速中文分词高能显示
使用like查询的时候,如果%符号在第一个位置,索引可能用不上
select * from t1 where name like "admin%" 索引用的上
select * from t1 where name like "%admin" 用不上
多表查询的时候不要使用子查询。因为子查询创建临时表,不仅创建还要销毁
二.简化sql:
1.不是用子查询
子查询就是将内层查询结果当外层条件,执行子查询时创建了临时表在磁盘中,创建和删除临时表耗费资源。
尽量采用join,或减少select嵌套
2.加陈余字段
尽量不使用join。比如订单行表加商品信息,订单表加总金额。
三.优化服务器硬件:
1.配置大内存
2.高速磁盘,合理分配磁盘,多核处理器。
四.mysql参数优化:
参数要结合数据引擎
不是越大越好,取决于内存大小。
比如:
key_buffer_size:表示索引缓冲区的大小。索引缓冲区所有线程共享。增加索引缓冲区可以得到更好的处理的索引(对所有读和多重写),它的大小取决于内存的大小,如果值太大,导致操作系统频繁换页,也会降低性能。
sort_buffer_size:表示每个需要排序的线程分配的缓冲区大小,增加这个参数值可以提高Order by与 Group by操作速度,默认值是2M。
table_cache:表示同时打开表的个数,这个值越大能够打开表个数越多,过大同时打开表太多会影响操作系统性能。
query_cache_size与query_cache_type
http://blog.csdn.net/jshuanghua/article/details/53858490
执行计划器:--深入学习
还包括内部参数优化,服务器版本,硬件,业务场景。唯一索引,注入索引。
redis 3.0以下不能做集群,可以使用主从,用哨兵监控。
redis 3.0以上做claub集群。
以上参考:http://blog.csdn.net/zhuxineli/article/details/14455029
postgre参考:http://blog.csdn.net/chuan_day/article/details/45841345
explain ANALYZE,set enable_seqscan to false;
object relation mapping(隐藏了数据访问细节,把sql写在java拼接,反射牺牲性能,多表力不从心)
分库分表
尽可能做到 同一个操作在一个库里。
分表产生id问题
1专门一张表,存储自增ID
2利用一致算法,根据时间不同,或者其他业务数据值,计算唯一的ID
分表
每个表结构一样,表明不同。
把表明计算规则抽取出来,每次查询之前,根据业务值,计算查询结果所在表。
查询之前,必须明确查询的范围比如时间点
分库
1.当使用切换数据源后,aop配置,事后处理,
自动切换到默认的数据源。
2.根据时间2015,2016,起不同key名,传入年份参数进行动态切库。
分库分表规则:
1.范围:数据分成n个区间范围,根据业务数据计算出记录所在范围区间。
2.哈希(hash):根据业务值,计算出hashcode,再对应具体数据库。
3.预定一个列表值,比如按照时间分库
产生问题:
1.两个库,进行分页如何解决。
2.查询两个表,分别在不同库,只能查询两次。这个问题不能避免,所以尽可能统一业务放一个库。
3.跨库服务操作,用到分布式事物。
总结
自己实现分库分表代码
聚簇索引与非聚簇索引
http://blog.csdn.net/lijiaz5033/article/details/50129723
https://www.cnblogs.com/T8881/p/5940338.html
发表评论
-
msql主从同步机制
2019-04-12 17:08 300DB主从分离:主服务 更新有线程记录mysq 的blog记录文 ... -
mysql原理分析(可用于培训)
2019-03-29 19:59 2831 ... -
redis主从同步/复制
2019-03-08 14:17 292redis主从是如何同步的 先说已经执行过首次同步(salvo ... -
数据库索引
2019-03-04 11:41 320参考:https://www.cnblogs.com/yelo ... -
数据库死锁&数据库锁知识点
2019-02-28 17:28 426参考:https://www.cnblogs.co ... -
redis 在业务代码应用
2018-08-02 16:30 5321.查库存 public class IndexDatas ... -
redis被动缓存
2018-04-04 18:45 488package com.pingan.haofang.ag ... -
本地缓存类
2018-04-04 18:44 325package com.pingan.haofang.ag ... -
缓存集中形式
2018-03-31 17:11 3241.被动缓存 被动缓存: 当取service服务数据redis ... -
分布式事务
2018-01-25 20:37 918事务 原子性,事务要么全执行,要么全不执行。 一致性,事务开 ... -
数据库死锁
2017-12-26 11:35 304死锁(Deadlock) 所谓死 ... -
redis sentinel & cluster 原理分析
2017-03-20 17:03 370[img][/img]http://lib.csdn.net/ ... -
redis sentinel:使用Spring-data-redis操作Redis的Sentinel
2017-03-20 10:22 619redis整合spring(redisTemplate工具类) ... -
mysql服务端安装(centos)
2017-03-02 18:10 383http://jingyan.baidu.com/articl ... -
redis cluster:缓存数据库Redis集群搭建
2016-12-19 22:39 493http://www.redis.cn/topics/clus ... -
mysql服务端与客户端安装(windows)
2016-12-02 11:23 796一.服务端安装5.7版本(zip的方式) 1.下载zip文件 ...
相关推荐
前几天发布了kamike.db>这个ORM中间件,这几天就把我之前写的分库分表功能裁剪一下,然后基于kamike.db进行重构。 现在发布一个基本算法实现完毕的版本,模拟了jdbc的操作过程,实现分库分表。具体使用例子我还...
与ShardingProxy不同,ShardingJDBC在客户端执行分库分表逻辑,提供灵活的配置但需要业务方自定义逻辑。 ShardingJDBC实战表明,其核心在于配置分片算法,常见的包括inline、standard、complex和hint分片策略...
Octillery是用于数据库分片的Go包。 它可以与每个OR Mapping库(xorm,gorp,gorm,dbr ...)一起使用,实现数据库/ sql接口或原始SQL。
支持多数据源、分库分表和分布式事务。支持 Dubbo RPC 的完整功能,有超过 1亿+ 用户产品正在使用。完整的单点限流和分布式限流功能。支持基于 Apollo 和 Nacos 的分布式配置中心。完整的分布式缓存、分布式session...
不同与传统的sql语句插入方式,通过ORM方式操作数据库,简单明了
mysql知识点,希望可以帮助大家 mysql知识点,希望可以帮助大家
2. 性能优化:包括 SQL 查询优化、索引优化、数据表分区、缓存机制等。 3. 备份与恢复:包括数据备份和恢复的方法、备份数据的类型、备份与恢复的策略、日志文件管理等。 4. 数据库设计:包括数据库设计范式、数据库...
更为重要的是,使用好的ORM框架更容易调优和优化性能,手写原生数据访问代码在性能调优上则会困难得多。本文中的示例建立在Mindscape的LightSpeedORM之上,我们将结合示例讨论常见的问题及其解决方案。让我们来看看...
主要介绍了浅谈优化Django ORM中的性能问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表 课程目标 快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介 ShardingSphere是...
.net Orm_Mysql
Apache ShardingSphere 是一款开源的分布式...• 适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接 使用 JDBC; • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP
Sworm是一个基于Swoole的异步MySQL调用的ORM数据库框架。该框架封装了swoole_mysql,API与NotORM很相似。使用Sworm能更加轻松地生成查询语句,使代码结构更加清晰,返回更加规范。
Spot2:一个MySQL的ORM映射器
Go Golang的ORM库
.NET高性能框架Chloe.ORM-支持各种主流数据库,性能好,扩展强。Chloe 操作入口是 IDbContext。IDbContext 仅有两个 Query、两个 Insert、两个 Update 、两个 Delete 和一个 TrackEntity 方法,以及一个 Current...
SQLite ORM:用于现代C 的SQLite ORM库,只有header
Django ORM查询优化的实例
simple_orm_mysql这是一个轻量级的mysql orm模型 ,目的是打造一个超级轻便的python orm, 现在只是把架子给搭建出来。尽量让simple_orm_mysql的用法像django的orm ,这样能更加容易的上手。 我在博客中描述了开发orm...
ORM映射与WEB的应用ORM映射与WEB的应用ORM映射与WEB的应用ORM映射与WEB的应用ORM映射与WEB的应用ORM映射与WEB的应用