• 高性能mysql第三版读书笔记2


    如果查询在from子句中包含子查询,MySQL会执行子查询,将结果放在一个临时表中,然后完成外层查询的优化,它必须在外层查询优化前处理;所有类似的子查询,explain也必须这样做,意味着如果子查询开销较大,或使用临时表,服务器开销会比较大。这时候可以使用join连接查询代替子查询。

    explain对内存排序和临时文件都使用filesort,并且对于磁盘上和内存中的临时表都显示using temporary。

    select_type表示简单查询,还是复杂查询,有simple(不包含子查询和union),subquery(不在from子句中),derived(from子查询中的select,将结果放在临时表中,叫派生表),union,union result(从union的匿名临时表检索结果的select语句),dependent(select依赖于外层查询中发现的数据或者相关子查询),uncacheable(select中某些特性阻止结果缓存于一个item_cache中)。table列中的derivedN表示子查询,其中N表示子查询的ID,第几个子查询。

    type访问类型:依次从最差到最优all,index,range,ref(索引访问或者索引查找)。

    possible_keys查询可能使用哪些索引,这个索引能高效查找数据,要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

    key列表示查询决定已经使用了哪个索引,是优化后使用的索引。

    key_len列表示索引里可能使用的最大长度字节数。

    ref列显示之前的表在key列记录到索引中查找值所使用的列或常量。

    rows列表示为了找到所需的行而要读取的行数,所有rows行数相乘就是要读取的行数。

    filtered列显示针对表里符合某个条件的记录数的百分比,也就是说把rows列和这个百分比相乘就能估算这个查询计划里前一个表关联的行数。

    extra列显示了不适合在其他列显示的列,using index使用覆盖索引,using where表示服务器将在存储引擎检索后再进行过滤,using temporary对查询结果排序是使用临时表,using filesort对结果使用外部索引排序,在磁盘上或者内存上。

    表锁使用lock tables创建,全局锁使用flush tables with read lock或设置read_only=1,获取全局读锁,它与任何表锁都冲突。

    命名锁是表锁的一种,在服务器重命名或删除一个表时创建,字符锁使用get_lock()及相关函数锁住或释放任意一个字符串。

    MySQLadmin debug可以显示哪个线程阻塞查询的表锁。

    show innodb status可以显露一些锁的信息,还有information_schema数据库中显露事务和锁信息。

    MySQL服务器逻辑架构:第一层连接处理,授权认证,安全等,第二层,比较核心的一层,查询解析,分析优化,缓存,内置函数,还有夸存储引擎的功能比如存储过程,触发器,视图等,第三层,包含存储引擎,负责数据的存储和提取。

    事务原子性:不可分割,要么全部成功,要么。全部失败。事务一致性:状态转移,不会影响数据的变化,假如执行一半宕机,不会提交,还是原来的数据。事务隔离性:正在修改数据,其他用户不会看到。事务持久性:事务一旦提交就永久保存,即使系统崩溃也不会丢失数据。事务隔离级别:未提交读(一个事务修改数据,为提交事务,但是另一个事务已经看到之前事务修改的数据,脏读),已提交读(一个事务未提交的数据,另一个事务看不到它的数据,只有之前的事务提交了,才能看到,这样导致这个事务两次查询的数据不一致,不可重复读)。可重复读(也叫幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。或者select 某记录是否存在,不存在,准备更新该记录,但执行 update时发现此记录已被删除,无法更新,此时也会产生幻读。)

    innodb mvcc支持高并发,通过间隙锁next-key locking解决了这个问题)。innodb表基于聚簇索引建立,它的二级索引必须包含主键列,如果主键列很大,其他所有也很大。

    myisam不支持事务和行级锁,支持表锁,支持全文索引,支持并发插入concurrent insert(读取查询的同时,可以插入数据)。

    MySQL存储在两个文件中数据文件(以.MYD结尾)和索引文件(以MYI结尾)。

  • 相关阅读:
    回归树模型分析纪录片播放量影响因素|数据分享
    拓端tecdat|Python进行多输出(多因变量)回归:集成学习梯度提升决策树GRADIENT BOOSTING REGRESSOR回归训练和预测可视化
    【视频】向量自回归VAR数学原理及R软件经济数据脉冲响应分析实例
    拓端tecdat|R语言单变量和多变量(多元)动态条件相关系数DCCGARCH模型分析股票收益率金融时间序列数据波动率
    拓端tecdat|R语言IRT理论:扩展Rasch模型等级量表模型lltm、 rsm 和 pcm模型分析心理和教育测验数据可视化
    RustSqlx极简教程
    Rust极简教程
    PHP ...语法糖的应用
    springcloud 搭建gateway 遇到一个小坑
    电子时钟滚动效果实现
  • 原文地址:https://www.cnblogs.com/nizuimeiabc1/p/12862432.html
Copyright © 2020-2023  润新知