MYSQL中如何使用handler

57次阅读
没有评论

共计 4668 个字符,预计需要花费 12 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 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”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计4668字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)