《java代码示例》

摘要
一些示例说明

  • sql 频次分析
    • show GLOBAL STATUS like ‘com_______’
  • 查看慢查询日志是否开启
    • show VARIABLES like ‘slow_query_log’
    • my.cnf 可以开启慢查询
      • 开启慢查询:show_query_log=1
      • 超过x秒记录日志:long_query_time=2
  • profile
    • 是否支持: select @@have_profiling
    • 是否开启: select @@profiling
    • 开启: set profiling = 1
    • 单条sql每步耗时占比: show profile for query [query_id]
  • 唯一索引 全文索引 普通索引
  • 聚集索引 有一个
    • 默认主键
    • 其次唯一索引
    • 否则隐藏rowid字段
  • 二级索引 有多个
    • 页子节点是聚集索引
    • 二级索引检索先找到聚集索引,再通过聚集索引找到行数据(回表查询)
  • b+树高度
    • 2层可以承载n8+(n+1)6=61024 n约等于1170 117016=18736条数据
    • 3层可以承载1171*16=21939856条数据
  • 索引失效
    • 需要符合最左前缀索引
    • or 其中一列没有索引将失效
  • 使用索引建议
    • 禁止在更新十分频繁、区分度不高的属性上建立索引。
  • 逻辑删除规则
    • 需要逻辑删除的情况
      • 防止数据误删除,不能找回数据;
      • 这些数据还具有一定的商业价值,比如用户的注册信息;
      • 虽然这些数据可以删除,但是这些数据还有关联数据,这些关联数据不能删除。
    • 逻辑删除带来的问题
      • 数据库表的数据冗余,导致查询缓慢;
      • 写sql进行数据处理时需要排除那些已经逻辑删除的数据,这就会导致sql复杂,容易出错,特别是涉及多表查询时;
        进行逻辑删除时,还需要考虑与之相关的数据怎么处理;
        还有,如果数据表的某个字段要求唯一,并强制约束,比如用户表中的登录用户名字段,设计为逻辑删除的话,一旦有新的同用户名记录就无法插入。但如果不将该字段设置为唯一性约束的,那么在每次插入数据的时候,都需先进行一次查询,看看有无未(逻辑)删除的同名记录存在,低效率是一回事,而且在高并发的系统中,很难保证其正确性。
    • 简单了解前缀索引的概念,目前感觉无实际的应用意义
      • 一段文字过长时可以截取前几位字符串作为索引
      • 可以先通过查询sql从区分度最高与截取长度之间找平衡
    • 覆盖索引效率最高
      • 因为查询字段就是索引列,无需徽标查询
        线程暂停的实现
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        这里提供一个public方法setSuspend来设置暂停标识。如果为true时当前线程获取control对象的锁,并执行wait()方法。此时线程会一直处于阻塞状态,直到control对象
        调用notify或者notifyAll方法。

        public class MyThread extends Thread {
        private String control = "";//只是任意的实例化一个对象而已

        private boolean suspend = false;//线程暂停标识

        @Override
        public void run() {
        while (true) {
        synchronized (control) {
        if (suspend) {
        try {
        control.wait();
        } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        }
        }

        //doSomething
        }


        }

        public void setSuspend(boolean suspend) {
        if (!suspend) {
        synchronized (control) {
        control.notifyAll();
        }
        }
        this.suspend = suspend;
        }
        }
发布于

2021-06-09

更新于

2022-07-07

许可协议

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...