MySQL DAL架构演化

1.优化sql和索引 2.缓存 memcached,redis; 3.读写分离 就做主从复制或主主复制,读写分离,可以在应用层做,效率高,也可以用三方工具,第三方工具推荐360的atlas,其它的要么效率不高,要么没人维护; 4.分区表 针对分区表做优化,SQL条件中要带上分区条件的列 5.垂直拆分, 将一个大的系统分为多个小的系统,也就是分布式系统; 比如,原来的一个db包含了:user相关业务 … 继续阅读

SQL优化

SQL优化在日常开始比较常见,又非常重要,网上很多的教程,抽空整理了一下。 SQL 优化 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好不要给数据库 … 继续阅读

MySQL索引以及背后的数据结构

索引 本质上,索引是一堆有序的结构化的数据。 个人的理解,搜索的本质是查找。 查找/搜索算法(查询算法) 顺序查找(linear search) 时间复杂度为O(n),在数据量很大时显然是糟糕的 二分查找(binary search) 时间复杂度可以表示O()=O(logn) 二叉树查找(binary tree search) 时间复杂度: 如果二叉排序树是平衡的,则n个节点的二叉排序树的高度为L … 继续阅读

MySQL慢查询与索引优化

MySQL慢查询 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。 默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动 … 继续阅读

MySQL索引

索引 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。 索引类型 数据库设计器中创建四种索引: … 继续阅读

乐观锁和悲观锁(synchronized和CAS)

乐观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想 … 继续阅读