如何查看mysql消耗的逻辑读和物理读情况

如何查看mysql消耗的逻辑读和物理读情况,第1张

对于查询处理,可将其分为逻辑查询处理和物理查询处理。逻辑查询处理表示执行查询应该产生什么样的结果,而物理查询代表MySQL数据库是如何得到结果的。

逻辑查询处理

MySQL真正的执行顺序如下:

(8)SELECT (9)DISTINCT<select_list>

(1)FROM <left_table>

(3)<join_type>JOIN<right_table>

(2) ON <join_condition>

(4)WHERE <where_condition>

(5)GROUP BY <group_by_list>

(6)WITH {CUBE|ROLLUP}

(7)HAVING<having_condition>

(10)ORDER BY<order_by_list>

(11)LIMIT <limit_number>

FORM:对FORM子句中的左表<left_table >和右表 <right_table >执行笛卡儿积,产生虚拟表VT1。

ON:对虚拟表VT1应用ON筛选,只有那些符合<join_condition >的行才被插入到虚拟表VT2中。

JOIN:如果指定了OUTER JOIN,那么保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3。如果FROM字句包含两个以上表,则对上一个连接生成的结果表VT3和下一个表重复执行步骤1~步骤3,直到处理完所有的表为止。

WHERE:对虚拟表VT3应用WHERE过滤条件,只有符合<where_condition >的记录才被插入到虚拟表VT4中。

GROUP BY:根据GROUP BY子句中的列,对VT4中的记录进行分组 *** 作,产生虚拟表VT5.

CUBE|ROLLUP:对虚拟表VT5进行 CUBE或ROLLUP,产生VT6.

HAVING:对虚拟表VT6应用HAVING过滤器,只有符合<having_condition >的记录才能被插入虚拟表VT7.

SELECT:第二次执行SELECT *** 作,选择指定的咧,插入到虚拟表VT8。

DISTINCT:去除重复数据,产生虚拟表VT9。

ORDER BY:将虚拟表VT9中的记录按照<order_by_list >进行排序 *** 作,产生虚拟表VT10。

LIMIT:取出指定行的记录,产生虚拟表VT11,并返回给查询用户。

物理查询处理

上面是逻辑查询处理,但是数据库也许并不会按照逻辑查询处理的方式进行查询。MySQL数据库层有Parser和Optimizer两个组件。Parser的工作就是分析SQL语句,而Optimizer的工作就是对这个SQL语句进行优化,选择一条最优的路径来选取数据,但是必须保证物理查询处理的最终结果和逻辑查询处理的结果是相等的。

如果表上建有索引,那么优化器就会判断SQL语句是否可以利用该索引来进行优化。如果没有可以利用的索引,可能整个SQL语句的执行代价非常大。

假设表A和表B都是有10万行数据,并且两个表都没有索引,因此最终SQL解析器解析的执行结果为逻辑处理的步骤,共经过11个步骤来进行数据的查询。最终根据笛卡尔积生成一张虚表VT1,共100亿行数据,执行这条SQL语句一般的电脑至少得跑一个多小时。

然而,如果这时候表B上添加一个主键值,在执行这条SQL语句,那么只需话费1秒。促使这个查询时间大幅减少的原因就是添加索引后避免了笛卡儿积表的产生。

物理查询会根据索引来进行优化。

①MySqlforExcel——mysql的Excel插件

MySql数据库专门为Excel准备了一个数据 *** 作插件,可以方便地对数据进行导入导出扩展和编辑。本插件安装后,在Excel的“数据”菜单会出现一个如下所示的菜单项,第一次点击它需要对mysql数据库访问用户名、密码及数据库名称等做一个设定,以后就可以随时读取和 *** 作数据库中的数据了。如果安装完后没有出现在Excel菜单,则可能需要到com加载项中去勾选一下。这种方法也是最简单的一种连接方法,近乎于傻瓜式链接。

②MSQuery链接

MSQuery链接需要先安装mysqlODBC驱动。驱动安装完成后,先要到windows控制面板—管理工具——“ODBC数据源”中进行用户或系统数据源(DSN)设置。

点击“添加”,在d出的驱动列表中,选择MySqlODBC驱动,然后点击“完成”。

这时会d出一个对话框,让你配置mysql数据源的一些参数:数据源名称——随便,描述——随便,TCP/IP服务器——如果在本机就是localhost:3306,如果不是则需正确输入你的mysql账户的IP地址及端口,下面就是用户名、密码以及你要访问的数据库名称。一切配置完毕后可以点击Test进行测试,测试连接成功后,你会看到mysql数据源已经添加到用户数据源列表。

接下来,我们打开MSQuery,这时新添加的数据源已经出现在了数据库列表中,我们只需选中mysql数据源,点击确定,就可以对数据库中表和字段进行查询 *** 作了。

③PowerQuery链接

PowerQuery支持当今市场上所有主流数据库的直连,mysql当然也不在话下。由于前面已经设置过了数据源驱动,因此这里相对也就很简单。打开PowerQuery—获取外部数据—来自数据库—来自mysql数据库。

连接MYSQL数据库的方法及示例

方法一:

使用MYSQL推出的MySQL

Connector/Net

is

an

ADO.NET

driver

for

MySQL

该组件为MYSQL为ADO.NET访问MYSQL数据库设计的.NET访问组件。

安装完成该组件后,引用命名空间MySql.Data.MySqlClient

使用命令行编译时:csc

/r:MySql.Data.dll

test.cs

方法二:

通过ODBC访问MYSQL数据库

访问前要先下载两个组件:odbc.net和MYSQL的ODBC驱动(MySQL

Connector/ODBC

(MyODBC)

driver)目前为3.51版

安装完成后,即可通过ODBC访问MYSQL数据库

方法三:

使用CoreLab推出的MYSQL访问组件,面向.NET

安装完成后,引用命名空间:CoreLab.MySql

使用命令编译时:csc

/r:CoreLab.MySql.dll

test.cs

以下为访问MYSQL数据库实例

编译指令:csc

/r:CoreLab.MySql.dll

/r:MySql.Data.dll

test.cs

using

System

using

System.Net

using

System.Text

using

CoreLab.MySql

using

System.Data.Odbc

using

MySql.Data.MySqlClient

class

ConnectMySql

{

public

void

Connect_CoreLab()

{

string

c

MySqlConnection

mycn

=

new

MySqlConnection(constr)

mycn.Open()

MySqlCommand

mycm

=

new

MySqlCommand("select

*

from

shop",mycn)

MySqlDataReader

msdr

=

mycm.ExecuteReader()

while(msdr.Read())

{

if

(msdr.HasRows)

{

Console.WriteLine(msdr.GetString(0))

}

}

msdr.Close()

mycn.Close()

}

public

void

Connect_Odbc()

{

//string

MyC

string

MyC

+

"SERVER=localhost"

+

"DATABASE=test"

+

"UID=root"

+

"PASSWORD=qing"

+

"OPTION=3"

OdbcConnection

MyConn

=

new

OdbcConnection(MyConString)

MyConn.Open()

OdbcCommand

mycm

=

new

OdbcCommand("select

*

from

hello",MyConn)

OdbcDataReader

msdr

=

mycm.ExecuteReader()

while(msdr.Read())

{

if

(msdr.HasRows)

{

Console.WriteLine(msdr.GetString(0))

}

}

msdr.Close()

MyConn.Close()

}

public

void

Connect_Net()

{

string

myC

MySqlConnection

mycn

=

new

MySqlConnection(myConnectionString)

mycn.Open()

MySqlCommand

mycm

=

new

MySqlCommand("select

*

from

hello",mycn)

MySqlDataReader

msdr

=

mycm.ExecuteReader()

while(msdr.Read())

{

if

(msdr.HasRows)

{

Console.WriteLine(msdr.GetString(0))

}

}

msdr.Close()

mycn.Close()

}

public

static

void

Main()

{

ConnectMySql

ms

=

new

ConnectMySql()

ms.Connect_CoreLab()

ms.Connect_Odbc()

Connect_Net()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6252418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存