mysql循环结果集
1、while 循环是有条件的循环控制语句。满足条件后,再执行循环体中的SQL语句。具体语法为://先判定条件,如果条件为true,则执行逻辑,否则,不执行逻辑WHILE 条件 DOSQL逻辑...E...
2024.11.15Mysql体系结构图
Mysql 由:SQL接口(连接池)、解析器、优化器、查询缓存、存储引擎 等组成
SQL接口、连接池SQL接口:进行DML,DDL,存储过程,视图,触发器等操作和管理;用户通过SQL命令来查询所需要结果
连接池:管理用户的连接,线程管理等mysql> show variables like ‘%connection%‘;+--------------------------+-----------------+| Variable_name| Value|+--------------------------+-----------------+| character_set_connection | utf8|| collation_connection | utf8_general_ci || max_connections| 151 || max_user_connections | 0|+--------------------------+-----------------+解析器Mysql将用户的查询语句进行验证与解析,并创建一个内部的数据结构--语法树解析器由Lex和Yacc实现mysql> show variables like ‘optimizer_%‘;+------------------------+------------------------------------------------------------------------------------------------------------------------+| Variable_name| Value|+------------------------+------------------------------------------------------------------------------------------------------------------------+| optimizer_prune_level| 1|| optimizer_search_depth | 62 || optimizer_switch| index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on |+------------------------+------------------------------------------------------------------------------------------------------------------------+优化器访问路径的统计数据,进行各种优化,如:重写查询、选择读取表的顺序以及索引等
查询缓存存储select 语句以及相应的结果集。在解析查询之前服务器会先访问查询缓存。如果命中缓存最不会进行解析、优化
直接将结果返回
一般的缓存有:表缓存、记录缓存、key缓存、权限缓存等mysql> show variables like ‘%query_cache%‘;+------------------------------+----------+| Variable_name| Value|+------------------------------+----------+| have_query_cache | YES|| query_cache_limit| 1048576|| query_cache_min_res_unit | 4096 || query_cache_size | 16777216 || query_cache_type | ON|| query_cache_wlock_invalidate | OFF|+------------------------------+----------+ 存储引擎存储引擎是Mysql与文件打交道的子系统。Mysql的存储引擎是插件式的,可根据MySql AB公司文件访问层来定制一种
访问机制(这种访问机制就叫存储引擎)
InnoDbMyIsam SQL执行过程接受命令(用户验证、资源申请)、解析命令(SQL解析、生成语法树)、查询是否命中缓存、优化执行、执行(返回结果集)
mysql 分表mysql分表有两种方式,一种是mysql本身的分区表,另一种是在语言层面以相应的字段取模或者以特定的算法进行分表
mysql 分区表mysql 分区表对用户而言就是一个独立的逻辑表,但是底层由多个物理表组成。实现分区的代码实际上是对一组底层表的句柄
对象的封装。对分区表的请求,都会通过句柄对象转化为存储引擎的接口调用。使用partition by 子句定义每个分区的数据存放
分区表应用场景
表非常大以至于无法全部都放在内存中,或者只有表的最后部分有热点数据,其他都是历史数据分区表数据更容易维护数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备可以使用分区表避免某些特殊的瓶颈,如innodb的单个索引的互斥访问,ext3文件系统的inode锁竞争等分区表的限制
一个表最多只能有1024个分区在msyql5.1中,分区表必须是整数,或者是返回整数的表达式。在mysql5.5中,某些场景可以直接使用列进行分区如果分区字段有主键或者唯一索引列,那么所有主键与唯一索引列必须包含进来分区表中无法使用外键>注:分区表CRUD操作时会锁住所有底层表
逻辑分表采用特定的算法进行分表,如:uid%100 即把用户表分为100个表,一般数据量大了无法处理时还可以进行分库。
同样的道理,进行某一个特定的字段取模或者其它算法。
优点
解决大中数据并发问题,CRUD时不会影响整个业务缺点
数据维护起来比较麻烦,如给出指定的uid找相应的信息,你还得自己去算出在哪个表。(不过很明显,这优点大于缺点)
1、while 循环是有条件的循环控制语句。满足条件后,再执行循环体中的SQL语句。具体语法为://先判定条件,如果条件为true,则执行逻辑,否则,不执行逻辑WHILE 条件 DOSQL逻辑...E...
2024.11.15前言索引结构及查找算法一个sql语句在mysql里究竟是如何运行的呢?又是怎么去查找的呢? 其中就涉及到数据库(存储数据)以及查找算法。 先来看一下几种查找算法;目录查找:类似索引遍历:暴力查找二分:...
2024.11.15导出表结构mysqldump -uusername -ppasswd -hIP --single-transaction dbname table > /path/file.sql导出数据根据ID导出...
2024.11.15如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等。 如果仅仅使用CREATE TABLE ... select 命令,是无法实现的。 为大家介绍如何完整的复制MySQL数据表,...
2024.11.15前言Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结。索性这次把数据库中最核心的也是最难搞懂的内容,也就是索引,分享给大家。这篇博客我会谈谈对于索引结构我自己的看法,以及分...
2024.11.12