mysql handler 使用_mysql8 参考手册--HANDLER语句

HANDLER tbl_name OPEN [ [AS] alias]

HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)

[ WHERE where_condition ] [LIMIT ... ]

HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }

[ WHERE where_condition ] [LIMIT ... ]

HANDLER tbl_name READ { FIRST | NEXT }

[ WHERE where_condition ] [LIMIT ... ]

HANDLER tbl_name CLOSE

HANDLER语句提供对表存储引擎接口的直接访问。可用于 InnoDB和MyISAM表。

HANDLER ... OPEN语句打开一个表,使其可以使用后续HANDLER ... READ语句访问。该表对象未被其他会话共享,并且在会话调用HANDLER ... CLOSE或会话终止之前不会关闭 。

如果使用别名打开表,则其他HANDLER语句对打开的表的进一步引用必须使用别名而不是表名。如果不使用别名,而是使用数据库名限定的表名打开表,则其他引用必须使用非限定的表名。例如,对于使用打开的表 mydb.mytable,必须使用进一步的引用 mytable。

第一种HANDLER ... READ语法提取一行,其中指定的索引满足给定值并且满足 WHERE条件。如果您有多列索引,则将索引列值指定为以逗号分隔的列表。为索引中的所有列指定值,或为索引列的最左前缀指定值。假设一个索引my_idx包括三个名为列col_a, col_b以及col_c以该顺序。该HANDLER语句可以为索引中的所有三列或最左边的前缀中的列指定值。例如:

HANDLER ... READ my_idx = (col_a_val,col_b_val,col_c_val) ...

HANDLER ... READ my_idx = (col_a_val,col_b_val) ...

HANDLER ... READ my_idx = (col_a_val) ...

要使用HANDLER接口引用表的接口,请PRIMARY KEY使用带引号的标识符 PRIMARY:

HANDLER tbl_name READ `PRIMARY` ...

第二种HANDLER ... READ语法以匹配WHERE条件的索引顺序从表中获取一行 。

第三种HANDLER ... READ语法以符合WHERE条件的自然行顺序从表中获取一行 。它比需要进行全表扫描的速度更快 。自然行顺序是在表数据文件中存储行的顺序。该语句也适用于表,但是没有这样的概念,因为没有单独的数据文件。 HANDLER tbl_name READ index_nameMyISAMInnoDB

如果没有LIMIT子句,则所有形式都将 HANDLER ... READ提取一行(如果有的话)。要返回特定数量的行,请包含一个 LIMIT子句。它具有与SELECT语句相同的语法

HANDLER ... CLOSE关闭以打开的表HANDLER ... OPEN。

使用HANDLER 接口而不是常规SELECT 语句有多种原因:

HANDLER快于 SELECT:

为分配了一个指定的存储引擎处理程序对象HANDLER ... OPEN。该对象可HANDLER 用于该表的后续语句;它不需要为每个重新初始化。

涉及的解析较少。

没有优化程序或查询检查开销。

处理程序接口不必提供一致的数据外观(例如, 允许脏读取),因此存储引擎可以使用SELECT通常不允许的优化。

HANDLER可以更轻松地移植到使用类似底层ISAM接口的MySQL应用程序。(有关适应使用键值存储范例的应用程序的另一种方法,请参见第15.20节“ InnoDB memcached插件”。)

HANDLER使您能够以难以(甚至不可能)完成的方式遍历数据库SELECT。HANDLER当使用为数据库提供交互式用户界面的应用程序时,该 界面是查看数据的更自然的方式。

HANDLER是一个有点低级的语句。例如,它不提供一致性。也就是说, HANDLER ... OPEN它不 走表的快照,并不能 锁定表。这意味着在发出HANDLER ... OPEN语句之后,可以修改表数据(通过当前会话或其他会话),并且这些修改可能仅对扫描HANDLER ... NEXT或部分可见HANDLER ... PREV。

可以关闭一个打开的处理程序并将其标记为重新打开,在这种情况下,处理程序将丢失其在表中的位置。当同时满足以下两种情况时,会发生这种情况:

任何会话FLUSH TABLES在处理程序的表上执行或执行DDL语句。

打开处理程序的会话将执行HANDLER使用表的非语句。

TRUNCATE TABLE对于一个表,将关闭用打开的表的所有处理程序 HANDLER OPEN。

如果使用FLUSH TABLE bl_name with READ LOCK was opened with HANDLER,则处理程序将隐式刷新并丢失其位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值