楼主: earth2mars

mysql 的SQL语句是否也会有硬解析

[复制链接]
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
11#
发表于 2014-7-20 15:56 来自手机 | 只看该作者
本帖最后由 yulihua49 于 2014-7-20 17:15 编辑
earth2mars 发表于 2014-7-18 11:23
那每次硬解析多慢啊!

mysql的确没有软解析,不过它的硬解析挺快的。它的硬解析速度与ORACLE软解析速度相当。
我们提高速度的方法,可以尽量使用游标,即stmt打头的那组函数,打开游标后不要关闭,不断重用游标,绑定变量,执行一个语句。
就是采用不解析的方式提高速度。这个很有效的。

使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2014-04-05 06:00:00
12#
 楼主| 发表于 2014-7-20 18:39 | 只看该作者
yulihua49 发表于 2014-7-20 15:56
mysql的确没有软解析,不过它的硬解析挺快的。它的硬解析速度与ORACLE软解析速度相当。
我们提高速度的方 ...

“绑定变量,不解析”这不就是软解析吗?何来MYSQL没有软解析之说?

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
13#
发表于 2014-7-21 19:36 来自手机 | 只看该作者
earth2mars 发表于 2014-7-20 18:39
“绑定变量,不解析”这不就是软解析吗?何来MYSQL没有软解析之说?

不解析就是不解析,根本不是软解析。

使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2014-04-05 06:00:00
14#
 楼主| 发表于 2014-7-21 20:37 | 只看该作者
yulihua49 发表于 2014-7-21 19:36
不解析就是不解析,根本不是软解析。

不解析,源码也能执行?肯定会经过解析(编译)这个过程的

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
15#
发表于 2014-7-22 15:44 | 只看该作者
本帖最后由 yulihua49 于 2014-7-22 15:46 编辑
earth2mars 发表于 2014-7-21 20:37
不解析,源码也能执行?肯定会经过解析(编译)这个过程的

不是说了吗,只解析一次,后来的n次就使用先前的游标。
比如你要插入10000条记录。
先解析一个语句,生成一个游标。
然后使用这个游标执行10000次。

使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2014-04-05 06:00:00
16#
 楼主| 发表于 2014-7-22 15:46 | 只看该作者
yulihua49 发表于 2014-7-22 15:44
不是说了吗,只解析一次,后来的n次就使用先前的游标。

那不就是软解析吗??
如果SQL变化了呢? 必须重新解析吧?

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
17#
发表于 2014-7-24 14:12 | 只看该作者
本帖最后由 yulihua49 于 2014-7-24 14:28 编辑
earth2mars 发表于 2014-7-22 15:46
那不就是软解析吗??
如果SQL变化了呢? 必须重新解析吧?

哎,你根本不知道什么是解析。
一个未关闭的游标,再次使用,是没有解析这个过程的,使用的是现成的执行计划。
cursor=prepare(stmt);
for every rows {
    fill_data
    bind  for cursor with data   //绑定新数据。
    execute cursor;
}
close cousor

当然是语句不变化,数据可以变化。
看这个语句:
INSERT INTO mlc.tjrb (tjdate,unit,tabname,flg,dat1,dat2,dat3,dat4,dat5,dat6,dat7,dat8,dat9,dat10,dat11,dat12,dat13,dat14,dat15,dat16,dat17,dat18,dat19,dat20,dat21,dat22,dat23,dat24,dat25,dat26,dat27,dat28,dat29,dat30,dat31,dat32,dat33,dat34,dat35,dat36,dat37,dat38,dat39,dat40,dat41,dat42,dat43,dat44,dat45,dat46,dat47,dat48,dat49,dat50) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
里边没有数据,把它prepare了(解析),生成一个游标,然后用上述那个循环,绑定数据,执行。那中间是没有解析的。


使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2014-04-05 06:00:00
18#
 楼主| 发表于 2014-7-24 20:03 | 只看该作者
本帖最后由 earth2mars 于 2014-7-24 20:04 编辑
yulihua49 发表于 2014-7-24 14:12
哎,你根本不知道什么是解析。
一个未关闭的游标,再次使用,是没有解析这个过程的,使用的是现成的执行 ...


我说的是SQL变了,不是SQL里的变量变了,比如
select xx,yy from t;
select xx,mm from t;
请问第二句SQL能使用第1句SQL的计划?

你的例子就是软解析!,或者按照你的说法“不解析”

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
19#
发表于 2014-7-25 15:49 | 只看该作者
本帖最后由 yulihua49 于 2014-7-25 15:51 编辑
earth2mars 发表于 2014-7-24 20:03
我说的是SQL变了,不是SQL里的变量变了,比如
select xx,yy from t;
select xx,mm from t;

这个就是两个完全不同的语句,没办法,必须硬解析。
我说的不解析是指同一个语句,不同的值,多次使用时。

使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2014-04-05 06:00:00
20#
 楼主| 发表于 2014-7-25 16:57 | 只看该作者
yulihua49 发表于 2014-7-25 15:49
这个就是两个完全不同的语句,没办法,必须硬解析。
我说的不解析是指同一个语句,不同的值,多次使用时 ...

你说的不解析,其实就是软解析

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表