一个MySQL视图的优化过程

1.急需优化的sql

1 : 底子语法--------- 对实体集 的操作 ------------select 查询create 创立drop 删除alter 改善

explain

-

近年做三个基于.net mvc和MySQL的存储系统的优化工作,遭受了叁个实行相当的慢的SQL语句,经过风华正茂番灾殃,终于解决啦,分享一下进程。难点便是上面这个家伙:

----------- 对表的操作 --------------insert 插入update 更新delete 删除

一、id

1、单纯join(simple查询卡塔尔国的id都以1,按梯次往下看

2、subquery,scala subquery都会使id递增

-

create or replace view view_task_meter_info
as
select t1.TASK_ID,t1.task_no,t1.BINDBOX_BARCODE as box_barcode,t1.EQUIP_BAR_CODE,t1.METER_STATUS,t1.ENTITY_TYPE as RSLT_CODE,
-- 设备类别
(SELECT name from data_dictionary_info t01 where t01.domain ='设备类别' and t01.code = t3.EQUIP_CATEG) as T_Equip_categ,
-- 类别
(select name from data_dictionary_info t09 where t09.domain = '类型' and t09.code = t3.TYPE_CODE) as 
T_TYPE_CODE,
-- 类型
(select name from data_dictionary_info t09 where t09.domain = '类别' and t09.code = t3.RATED_CURRENT) as T_SORT_CODE,
t3.EQUIP_CATEG,t3.TYPE_CODE,t3.SORT_CODE
from
data_task_asset t1 left join data_meter_info t3 on t1.EQUIP_BAR_CODE=t3.BAR_CODE
union all 
select t1.CHK_TASK_ID as task_id,t1.TASK_NO,t1.BOX_BARCODE,t1.BAR_CODE as Equip_bar_code,'00' as METER_STATUS,t1.RSLT_CODE,
-- 设备类别
(SELECT name from data_dictionary_info t01 where t01.domain ='设备类别' and t01.code = t3.EQUIP_CATEG) as T_Equip_categ,
-- 类别
(select name from data_dictionary_info t09 where t09.domain = '类型' and t09.code = t3.TYPE_CODE) as 
T_TYPE_CODE,
-- 类型
(select name from data_dictionary_info t09 where t09.domain = '类别' and t09.code = t3.RATED_CURRENT) as T_SORT_CODE,
t3.EQUIP_CATEG,t3.TYPE_CODE,t3.SORT_CODE
from data_check_asset_info t1
LEFT JOIN data_meter_info t3 on t1.BAR_CODE = t3.BAR_CODE

----------- 授权及吊销授权 --------------grant 授权revoke 撤除授权

二、select type

SIMPLE:轻便询问,不含union或subquery(subquery视图合併也会成为simple卡塔尔

PRMARY:含union或subquery的主表

UNION:使用union结合的select,除了第一个之外的selcect都是union

UNION RESULT:union去除重复值的偶然表(union all不会冒出 union result因为不去重卡塔尔国

SUBQUE凯雷德Y:不在from后面现身的子查询(在select中冒出卡塔尔,与外表表没有涉嫌,优化时方可设想挪到from后边,有limit时,先limit再标量子查询,标量子查询尽量放在最外层

DEPENDENT SUBQUE卡宴Y :必得依赖于外界的值(如scala subquery恐怕exists卡塔尔,实施次数正视于外层结果集大小有关

DERubiconIVED:from前边表的职分上的subquery,生成在内存照旧有的时候表空间,当驱动表时优化主旨以减小数据量为目标,当作被驱动表时发生auto_key也要以减弱数据量为指标

MATE福睿斯IALIEZD:使用in的时候发出,也是发出auto_key

*derived不可能统意气风发的二种处境

1、union/union all

2、group by

3、distinct(查询包涵pk或然uk的时候能够加distinct保持结果集不改变卡塔 尔(阿拉伯语:قطر‎

4、聚合函数

5、limit

6、@(select * from table , (select @rn:=0 a)b)

-

解释一下业务:

-------------- 退出登入 -----------------quit/exit

三、Table

NULL:不利用其它表(特殊境况,select count(1) 全表卡塔 尔(阿拉伯语:قطر‎

derived id:如代表id=2的不时表

union id:表示id=1,2,3的不经常表

-

积累系统工作分为三块:出入库、盘点。data_task_asset是出入库职分资产明细,data_check_asset_info是盘点义务明细,data_meter_info是花费档案表。data_task_asset和data_check_asset_info表都应用基金条码(EQUIP_BAR_CODE/BAR_CODE)和财力档案表关联(BA宝马X5_CODE是档案表主键)。那几个视图的职业意义正是展现出入库、盘点职务的资金明细(富含档案音信),同期须求把档案新闻里面的恢宏代码字段翻译成文字新闻。上边视图中只列出3个字段作为示范,实际上必要翻译的字段有19个。

create database 数据库名[数据库选项] 多个编码格式,校验准则

四、Type

const:使用primary key也许unique获得一条数据,特点是show warnings能够展现常数,表明mysql执行计划是早期运营后生可畏都部队分

eq_ref:1、必得是join     2、满足被驱动表的连接条件是uk或然pk     3、如若是复合主键恐怕uk,相应的列名都必得满含

ref: 索引列=条件(等值相配卡塔 尔(阿拉伯语:قطر‎,有的时候候能够观望未有用上范围索引,优化为range效果会越来越好

range:索引范围查询(>,<,between,in,like卡塔 尔(阿拉伯语:قطر‎ 

index:索引全扫描,比全表扫描且order by的情事下要快,单绝大部分情况下是优化对象。首要用于1、不能够运用range、const、ref     2、只查询索引不回表(不查询索引外的字段卡塔尔     3、使用索引幸免排序

all:全表扫描,在进展大表中查询抢先四分之二成效比走索引越来越好。(日期like '2017%'也许数字列like '五分之一',字段类型隐式转变,没索引,对索引列加工等等卡塔 尔(英语:State of Qatar)

show index from tb;中的Cardinality列:表示去除重复值后的值(索引列的选拔性卡塔 尔(英语:State of Qatar)

-

其一视图刚先河未有以为慢,但是有一天测量试验做了一个7万多条明细的盘点任务后,每一次查询叁个任务的精益求精都要等上十几到几十秒,是在难以忍受。开工吧,先确诊一下。

要害 注意: 若是要选拔中文 应当要设置set names gbk; 告诉服务器客商端编码

五、key_len

关键用以判别复合索引具体用到哪几列

关于key_len的计算:https://www.cnblogs.com/lukexwang/articles/7060950.html

-

-

2.查阅执市场价格况

show databases 查看当前有如何数据库

六、Extra

上边是其一视图在查询那么些7万多条明细的盘点职务的推行时间,太骇人据说了,八十多秒。

show create database 数据库名 查看数据库的创造语句

1、Distinct

     MySQL在join进程中t第11中学收取生机勃勃行之后,查询t2表的时候蒙受生龙活虎行就停下,有一些像exists

规格是必需是join

distinct的是驱动表的主键且不能不是单列

被驱动表必需不能回表且跟驱动表是1:M的关联 

图片 1

drop database 数据库 删除数据库

2、select tables optimized away

     select个中独有min,max,count的时候才现身。 select count(1) from tb1;

探访实施陈设

alter database 数据库名 charset gbk 校订数据库编码格式 数据库名不可改革

3、using filesort

    在举行order by,group by且还没有利用索引的时候现身

图片 2

create table 表名[表选项] 字符编码 数据库引擎 创设数据库

4、using index

     using index表示使用索引且不回表,当没什么优化措施时,创造覆盖索引正是这种情形

额滴神呀,那可自然极其啊,每种字段的翻译都要询问字典表的1207条记下,叁个记下需求翻译14遍,7万条记下,供给查询字典表70万次,每回搜寻记录1000多条,那个当然十一分呀。

show tables 查看数据表

5、using temporary

     Mysql试行进程中为了存款和储蓄中间结果会动用temporay table

     假设实行安排中超级小概剖断temp table在内部存储器依旧disk中生成

     order by恐怕group by没走索引

     施行安插中select_type是derived时

     影响参数:tmp_table_size,max_heap_table_size,经常配备相符大

     查看方法:show session status like '%tmp%';

3.在字典表上加索引!!!

show create table 数据库表名 查看创立数量表名

6、using where

     意味着从存款和储蓄引擎中获得有的数量然后过滤,此中rows表示存款和储蓄引擎拿多少到内部存款和储蓄器的预算值,filter是在内部存款和储蓄器再过滤的百分比,平常using where的filter比很小

依照查询字典表的sql语句,大家在domain和code上加一齐索引

desc 表名 查看表结构

7、using index condition(ICP)

     在存款和储蓄引擎层过滤数据后再拿到内部存款和储蓄器

总得是二级索引才有,何况是索引后半片段无法运用的情形意义相比较好

set session optimizer = "index_condition_pushdown=on"

SELECT name from data_dictionary_info t01 where t01.domain ='设备类别' and t01.code = t3.EQUIP_CATEG

drop table 表名 删除表

8、using MRR

要害用以二级索引收缩索引到叶块的轻松IO来扩充提升效能(回表时先排序归总随机IO卡塔 尔(阿拉伯语:قطر‎

set session optimizer_switch = "mrr_cost_based = on"

图片 3

倘诺我们删除一个不设有的表格会报错 因而 大家 经常会 drop table 表名 加上 if exists 表名

9、Range checked for each record

当时type肯定是all,在检查测量检验是不是能应用索引(功能相当低卡塔 尔(英语:State of Qatar)

在all和(ref、range、index卡塔 尔(英语:State of Qatar)之间不只怕明显,现身这一个注脚有题目

那时须求选取show warnings明确

来看今朝的试生势况

rename table OldName to NewName 修表名

10、Using join buffer (Block Nested Loop)

接连字段没索引

连接字段类型不均等

关联表字符集不相像

被驱动表特别小的境况

batched_key_access=off (BKA肖似于BNL,减少涉及循环次数,BKA特点是会利用排序减少随便IO卡塔 尔(英语:State of Qatar)

show variables like 'optimizer_switch'

bka参考:http://blog.csdn.net/zbszhangbosen/article/details/7463394

实践时间:
实行时间后生可畏晃降至了两三秒,效果明显呀!
图片 4

**************** 改善定义 ****************alter table 表名 add | drop | change | modify例: alter table 表名 add 字段名 字段类型 扩张一列alter table 表名 drop 字段名 删除一列alter table 表名 change 旧字段名 新字段名 重命名字段alter table 表名 modify 字段名 新类型; 改进字段类型alter table 表名 charset 编码格式 改进表选项

实行陈设:
探访推行陈设你或者就不吃惊啦,创设目录后历次查询字典表,只寻找一条记下。
图片 5

************** 小规律 **************create database/table 扩充数据库/表drop database/table 删除数据库/表alter database/table 修改数据库/表show databases/tables 展现有哪些数据库/表show create database/table 显示创设语句

4.再加多少个目录

------------------------- 数据库操作 -------------------------插入数据insert into 证明 values

既然索引这么狠心,那就继续加索引呗,能够看来视图在询问出入库和盘点职责明细表时,也是全表查询。大家加个索引看看效果如何,笔者分别在data_task_asset的task_id和task_no、data_check_asset_info的chk_task_id和task_no上加多了叁只索引。上面看看执市场价格况:

询问数据select *|字段列表 from 表名 [where 条件] 字段列表以 "," 分割

执行时间:
施行时间周边比刚刚还长了少数,这就不合心意啦。
图片 6

删去数据delete from 表名 [where 条件]

试行安顿:
从实践布置来看,查询根本就从不动用索引,why?
图片 7

改良数据update 表名 set 字段=值,....... where 条件

5.mysql视图算法及不利用索引的情景

翻开服务器核查准绳show collation

试行一些百度文化:

****** 存款和储蓄引擎 ******create table 表名 engin = inndb|myisam

当客户创立视图时,mysql私下认可使用大器晚成种undefine的处清理计算法,就是会活动在集合和不经常表内实行精选

------------------- 数据库 存款和储蓄类型 ------------------数值型 字符串类型,日期时间项目

  • 对此ME讴歌RDXGE,会将援用视图的口舌的文件与视图定义归总起来,使得视图定义的某后生可畏有个别取代语句的附和部分。

  • 对此TEMPTABLE,视图的结果将被平放不经常表中,然后利用它试行语句。

  • 对于UNDEFINED,MySQL将精选所要使用的算法。借使恐怕,它趋向于MESportageGE实际不是TEMPTABLE,那是因为MECR-VGE日常更平价,并且只要使用了临时表,视图是不可更新。

数值类型 :tiny 微小small 小medium 中型

对此利用MERGE算法管理的视图,能够使用索引。不过,对于使用有时表算法管理的视图,不能够在其基表上运用索引提供的长处。MELANDGE算法必要视图中的行和基表中的行具备黄金时代对后生可畏的涉嫌。借使不富有该关系。必得运用一时表取代他。若是视图富含下述结构中的任何风姿罗曼蒂克种,将错失一定的关联:

unsigned 无符号属性

  • 聚合函数(SUM(),MIN(),MAX(),COUNT()等)
  • DISTINCT
  • GROUP BY
  • HAVING
  • UNION或UNION ALL

floatdoubledecimal

日常的不应用索引的询问

背后可拼接 MD 例: float M表示总位数,D表示小数位数

  • 生龙活虎经MySQL估量应用索引比全表扫描越来越慢,则不选用索引。举个例子,若是列key均匀布满在1和100时期,上边包车型大巴询问利用索引就不是很好:select * from table_name where key>1 and key<90;

  • 倘使运用MEMOENCOREY/HEAP表,何况where条件中不行使“=”进行索引列,那么不会用到目录,head表独有在“=”的尺度下才会利用索引

  • 用or分隔绝的尺度,要是or前的尺度中的列有索引,而背后的列没有索引,那么涉及到的目录都不会被用到,譬喻:select * from table_name where key1='a' or key2='b';要是在key1上有索引而在key2上尚未索引,则该查询也不会走索引

  • 复合索引,若是索引列不是复合索引的第后生可畏局地,则不选用索引(即不相符最左前缀卡塔 尔(阿拉伯语:قطر‎,比如,复合索引为(key1,key2),则查询select * from table_name where key2='b';将不会动用索引

  • 若果like是以‘%’早先的,则该列上的目录不会被利用。比方select * from table_name where key1 like '%a';该查询尽管key1上存在索引,也不会被应用

  • 假定列为字符串,则where条件中必须定会将字符常量值加引号,不然就算该列上存在索引,也不会被应用。比如,select * from table_name where key1=1;如果key1列封存的是字符串,即便key1上有索引,也不会被采纳。

时光项目Datatime 突显方式和下部的基本意气风发致timestamp 呈现情势为主同地方一直存款和储蓄范围不相似timestamp 存款和储蓄的是整形,不过插入突显形式一样注意: 平时开荒进度中 只开创二个时日戳字段,假诺不插入数据,会自动填充遮天数据插入的时日

6.干掉union all

date 年月日time 时分秒

为了印证实在是union all影响了目录的应用,大家去掉视图中的union all,让视图只担当查询盘点任务的明细及档案新闻,看看效果怎么样。

year 年

-奉行时间:
时光又比刚刚短了生机勃勃分钟,不错,不错。
图片 8

字符串格式char 最大尺寸 255varchar 大学一年级些 实际尺寸可变 可用 M 定义允许长度text 能够储存比较长的字符串,无法设置暗中认可值enum 枚举 只好选中一个值 enum(值1,值2....)set 群集 相符多选set(值1,值2.....)接收第三个值为 1 0000 0001次之个值位 2 0000 0010第几个值为 4 0000 0100set 最多可以有 64 种情状.............

-试行陈设
从实行布署能够观望,这一次使用了明细表的目录。
图片 9

-------------------- 列属性 --------------------null 暗中同意列约束允许字段为空not null 表示不容许字段为空 直接加在 字段类型后边就能够

7.存款和储蓄进度选用

desc 表名 能够查看 列限制

我们看到取到union all之后,明细表的目录在询问中被运用。就算大家从询问的年月上认为明细表使用索引和不选用索引未有太大差别。但这实际上只是数据太少反映不出难点,随着明细表数据的增加,有索引时每一种任务寻觅的记录数只与细密数量有关;而无索引时,各种职责明细查询是全表寻找。所以,union all必需去掉。

default 暗许值平常合作 not null 一同使用 给not null字段四个暗中同意值

那么难点来啊,程序结构已经基本定型,单个视图必得利用union all。这里有两种方案:

primary key 主键

  • 暌违为五个视图,出入库明细四个视图,盘点明细二个视图,在程序中决定使用不一致视图;
  • 运用存款和储蓄进程,在积攒进程中判别查询出入库明细照旧盘点明细。

unique key 唯后生可畏键与主键的区分 唯风姿罗曼蒂克键能够有多少个 主键不可能为null 唯后生可畏键可感觉 null

在Entity Framework中运用存款和储蓄进程还未尝试过,就用存款和储蓄进程啦:

auto_increment 自增加 经常合营主键使用 注意 : 字段必得为整形

mysql存款和储蓄进程代码:

comment 注释 : 日常加载字段类型前边

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_task_meter_info`(IN `taskId` DECIMAL(16,0), IN `taskNo` VARCHAR(32), IN `ioFlag` VARCHAR(8))
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
if ioFlag = '盘点' then
-- 返回盘点明细
select * from ...
where ...
else
-- 返回出入库明细
select * from ...
where ...
end if;
END

*********************** 外键 ***********************foreign key references 外表名 [选项]cascade : 同步操作父键对应字段更新删除的时候,子表的外键字段也开展相应的改良或删除

Entity Framework调用存储过程(看上去也挺低价的):

set null : 设置为 null当父表的对应键字段删除 大概更新的时候子表的外键字段就安装为null

var dataListProc =
                DbContext.Database.SqlQuery<view_task_meter_info>(
                    string.Format("CALL `sp_task_meter_info`({0}, '{1}','{2}')",searchModel.task_id,searchModel.task_no,searchModel.task_type)).ToList();

restrict : 屏绝主表更新也许去除

8.疑问

只顾 : 外键约束唯有 innoDB 存款和储蓄引擎才支撑

  • 总以为到温馨的翻译代码字段有一点太费时,不知诸位园友是怎么管理这种主题素材的。

主表更新foreign key references 父表 on update[选项]

好了,就到那边呀。那篇博客其实早该发出来的,因为一些迁延,今日到底赶出来啦。笔者认为每趟要写生机勃勃篇博客前,总以为有广大东西要说,可是非常多时候赶紧作品都写不通畅啦。动不动就想分条陈诉,动不动就想来个难点由来,技术方案。何况如若不可能聚焦时间写完,再回首已经是食不兼味。成了个成天宥在温馨项目、职分圈里的工程师啦。那特别!

主表删除foreign key references 父表 on delete[选项]

丰裕外键alter table 表名 add foreign key references 父表名(父表字段_[选项];

除去外键想要获取外键名 必得经过 show create table 表名获取alter table 表名 drop foregin key 外键名

--------------------------------- 数据操作详细 ---------------------------------插入数据正式语法insert into 表名 values

蠕虫复制insert into 表名 select from 表名

设若发生主键重复能够应用

直白更新insert into 表名 values on duplicate key update 字段=值[,字段=值];

或 直接删除原记录再插入replace into 表名 values ;

删除数据满足条件删除delete from 表名 [条件]

truncate 清空只能清空操作,不能够接收where决断,自增加字段重新恢复生机设置为 1

---------------------------------- 查询精解----------------------------------五子句顺序select *|字段列表 from 表名where 子句group by 子句having 子句boder by 子句limit 子句顺序不可更换

select 选项 all / distinctall : 全数 暗中认可的就是 alldistinct : 去重例 : select distinct name from 表名

select 别称select 字段名称 as 外号 from 数据表例 : select name as 名字 from student;展示出来的结果 name 就有名字 替换了

where 中的运算符between A and B : 在A 和 B 之间in : 值的成团 in 满足条件 2 或4 或8 的select *from student where age in 查询满意 年龄 为 22 或 23 或 24 学子的音信not in : 与上方 in 相反 找 值集结外的&& 也正是 and|| 相当于 or! 也便是 notwhere 查询条件不知有 = 还会有地点那个足以看做查询条件 运算符使用

like 模糊查询通配符% : 率性八个字符相配_ : 使用单个字符举行相称

group by 子句 : 通过分组获取数据聚合函数 : 平时与 group by 一齐利用 首要用来对风流罗曼蒂克组值的思忖(group 不要适逢其时进行分组)avg() : 重临平均值 , 空值会被忽视count() : 再次回到钦点组中的项目数目max() : 重临钦点组中的最大值min() : 重返钦点组中的最小值sum() : 重回内定组中的数据的和小括号中填入什么字段,获取获取相应的值例:select name sex,max from student where 1 group by sex;上例 以性别分组 获取 每组最大名字

having 子句 : 含义可知成为和 where 相符(分组之后在开展筛选只可以接收having子句)二者相比较 : where 子句是把磁盘上的多少筛选到内部存款和储蓄器having 子句是把内部存款和储蓄器中的多寡重复打开筛选where 子句不能够动用总结函数例 : select 字段 from 表名 group by sex having avg> 35

order by 子句 : 排序语法 : order by 字段 [desc|asc]desc : 降序 asc 升序多字段 : order by 字段1[desc|asc],字段2[desc|asc],......先根据字段 1 实行排序 然后在依照字段 2 举办排序

limit : 约束语法 : limit page page 含义 再次回到多少条记录limit start , endpage start 从第几条开头 endpage 再次来到多好条例句 select *from table_name limit 20,10; 从第七十条个开首 重临十条记下

************************** 联合查询 ******************************union : 语法:select union [选项] select 子句 union [选项]慎选就五个 一个是 all 另四个是 distinct 这么些是暗中同意选项all : 不去重 distinct : 去重注意:联合查询字段顺序,数目必得意气风发律采纳联合查询的时候若是有 order by 一定要用小括号括起来corss join : (笔者认为没什么卵用2)语法 : select *|字段列表 from 表名 cross join 表名;再次回到结果的条数 = 表名记录数 * 表名记录条数结论 : 没什么卵用

inner join : 能够简写成 joinselect *|字段列表 from 表 inner join 表 inner join 表 on 条件inner 能够轻松 只写join 系统暗许正是内连接on 连接条件 不能够简单能够给表经过 as 去别称注意:假设获得的字段音信,就算四个表中字段名有重复的,必需以 表名.字段的样式来得到内定的数量

left outer : 左外连接语法 : select *|字段列表 from 表 left outer join 表 on 条件左表为主,坐标中不恐怕连接的笔录生龙活虎致再次来到,由表中对应的字段使用 null 填充

有外连接 同上 方向相反

子句查询 (个人认为基本没用 太开支质量了)这么些团结研究吗

******************** 数据恢复和备份 *********************数据表的备份语句 : select *|字段列表 into outfile 路线 from 表名注意 : 路线应当要用引号引起来,且路径是 反斜杠 / load data infile 路线 into table 表名

sql 的备份备份须求在cmd的景况中备份,cmd的情形变量是 mysqldump,那个mysqldump 在对应的mysql/bin文件夹中

mysqldump –h –P –u –p 数据库名 表名 > 路线

只顾: 数据库名前面未有表名,表示一切库都备份路线不要加 引号,也是用反斜杠后缀名叫 .sql

平复mysql –u –p 数据库名 < 路线

只顾 : 这里的 备份还原是 window 下的

********************* 视图 **********************视图:多个设想的表,自个儿超少,通过实施相应的select 语句落成获得对应的数额创制视图 : create view 视图名 as select 子句视图是虚构的数据表,全体的操作都得以对应数据表操作.

show tables 能够查阅到视图desc 视图名 能够看出视图结构show create view 视图名 查看视图创造语句alter view 视图名 as select 子查询 纠珍惜图drop view 视图名 删除视图

作用: 1. 录取 sql 语句2. 简化复杂 sql 语句 是表的组成部分并非整个表3. 爱戴数量,给予表特定部分的权柄并非整整表访问4. 水平分表和垂直分表水平分表:把一个大表分成若干个结构相同的小表,必要动用union连接数据垂直分表:摆三个表的字段分成多少个部分,常用的位于二个表里,不经常用的字段放在另四个表里,需求时用join连接起来

视图算法幼功语法: create algorithm = undifined|merge|temptable view 视图名 as select 子句私下认可算法 undifined算法分类1. UNDEFINED : 未定义算法,暗许算法,让系统活动采用相应算法,恐怕钦点算法为 undifined2. ME福睿斯GE : 合并算法,先组装3. undifined : 系统私下认可算法,自动选用是用哪些

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:一个MySQL视图的优化过程

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。