MYSQL中如何利用handler
发布时间:2022-01-12 11:32:15 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下MYSQL中如何使用handler,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! HANDLER tbl_name OPEN [ AS alias ] HANDLER tbl_name READ index_name { =
小编给大家分享一下MYSQL中如何使用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语句提供通往表存储引擎接口的直接通道。HANDLER可以用于MyISAM和InnoDB表。 [@more@] HANDLER...OPEN语句用于打开一个表,通过后续的HANDLER...READ语句建立读取表的通道。 本表目标不会被其它线程共享,也不会关闭,直到线程调用HANDLER...CLOSE或线程中止时为止。 如果您使用一个别名打开表,则使用其它HANDLER语句进一步参阅表是必须使用此别名,而不能使用表名。 如果被指定的索引满足给定的值并且符合了WHERE条件,则第一个HANDLER...READ语法取出一行。 如果您有一个多列索引,则指定索引列值为一个用逗号隔开的清单。既可以为索引中的所有列指定值, 也可以为索引列的最左边的前缀指定值。假设一个索引包括三个列,名称为col_a, col_b,和col_c,并按此顺序排列。 HANDLER语句可以为索引中的所有三个列指定值,或者为一个最左边前缀中的各列指定值。举例说明: HANDLER ... index_name = (col_a_val,col_b_val,col_c_val) ... HANDLER ... index_name = (col_a_val,col_b_val) ... HANDLER ... index_name = (col_a_val) ... 第二个HANDLER...READ语法按索引的顺序从表中取出一行。索引的顺序符合WHERE条件。 第三个HANDLER...READ语法按自然行的顺序从表中取出一行。自然行的顺序符合WHERE条件。 当想要对整个表进行扫描时,此语句比HANDLER tbl_name READ index_name更快。自然行的顺序指的是行存储在 MyISAM表数据文件的顺序。本语句也适用于InnoDB表,但是因为没有独立的数据文件,所以没有这类概念。 不使用LIMIT子句时,所有形式的HANDLER...READ语句均只取出一行。 如果要返回多个行,应加入一个LIMIT子句。本语句于 SELECT语句的语法一样。请参见13.2.7节,“SELECT语法”。 HANDLER...CLOSE用于关闭使用HANDLER...OPEN打开的表。 注释:要使用HANDLER接口来查阅一个表的PRIMARY KEY,应使用带引号的识别符`PRIMARY`: HANDLER tbl_name READ `PRIMARY` > (...); HANDLER是比较低级别的语句。例如,它不能提供一致性。也就是说,HANDLER...OPEN不能为表做快照,也不能锁定表。这意味着, 当一个HANDLER...OPEN语句被编写后,表数据可以被更改(用此线程或用其它线程),并且这些更改只会部分地出现在HANDLER...NEXT或HANDLER...PREV扫描中。 使用HANDLER接口代替常规的SELECT语句有多个原因: · HANDLER比SELECT更快: o 一个指定的存储引擎管理程序目标为了HANDLER...OPEN进行整序。该目标被重新用于该表的后续的HANDLER语句;不需要对每个语句进行重新初始化。 o 涉及的分析较少。 o 没有优化程序或查询校验开销。 o 在两个管理程序请求之间,不需要锁定表。 o 管理程序接口不需要提供外观一致的数据(例如,允许无条理的读取),所以存储引擎可以使用优化,而SELECT通常不允许使用优化。 · 有些应用程序使用与ISAM近似的接口与MySQL连接。使用HANDLER可以更容易地与这些应用程序连接。 · HANDLER允许您采用一种特殊的方式进出数据库。而使用SELECT时难以采用(或不可能采用)这种方式。有些应用程序可以提供一个交 互式的用户接口与数据库连接。当与这些应用程序同时使用时,用HANDLER接口观看数据更加自然。 示例: mysql> desc test1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | a | int(11) | YES | MUL | NULL | | | b | varchar(45) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ mysql> show index from test1; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | test1 | 1 | ab | 1 | a | A | 4 | NULL | NULL | YES | BTREE | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 1 row in set (0.00 sec) mysql> handler test1 open; Query OK, 0 rows affected (0.00 sec) mysql> handler test1 read first; +------+------+ | a | b | +------+------+ | 1 | 2 | +------+------+ 1 row in set (0.00 sec) mysql> handler test1 read next; +------+------+ | a | b | +------+------+ | 1 | 2 | +------+------+ 1 row in set (0.00 sec) mysql> handler test1 read next; +------+------+ | a | b | +------+------+ | 1 | 2 | +------+------+ 1 row in set (0.00 sec) mysql> handler test1 read next; +------+------+ | a | b | +------+------+ | 3 | 4 | +------+------+ 1 row in set (0.00 sec) mysql> handler test1 read next; +------+------+ | a | b | +------+------+ | 1 | 2 | +------+------+ 1 row in set (0.00 sec) mysql> handler test1 read next; +------+------+ | a | b | +------+------+ | 3 | 4 | +------+------+ 1 row in set (0.00 sec) mysql> handler test1 read next; +------+------+ | a | b | +------+------+ | 3 | 4 | +------+------+ mysql> handler test1 read next; Empty set (0.00 sec) mysql> handler test1 read next; Empty set (0.00 sec) mysql> handler test1 read next; Empty set (0.00 sec) mysql> handler test1 read next; Empty set (0.00 sec) mysql> handler test1 read ab=(1); +------+------+ | a | b | +------+------+ | 1 | 2 | +------+------+ 1 row in set (0.00 sec) mysql> handler test1 read ab=(2); Empty set (0.00 sec) mysql> handler test1 read ab=(3); +------+------+ | a | b | +------+------+ | 3 | 4 | +------+------+ 1 row in set (0.00 sec) mysql> handler test1 read ab=(3) limit 10; +------+------+ | a | b | +------+------+ | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | +------+------+ 10 rows in set (0.00 sec) mysql> handler test1 read ab=(3) limit 20; +------+------+ | a | b | +------+------+ | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | | 3 | 4 | +------+------+ 10 rows in set (0.00 sec) 以上是“MYSQL中如何使用handler”这篇文章的所有内容,感谢各位的阅读! (编辑:新余站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐