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)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10130206/viewspace-1040833/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MYSQL使用記錄之:infile/outfileMySql
- MySQL Cases-記錄大量waiting for handler commitMySqlAIMIT
- MySQL之Handler_read_*MySql
- Android Handler機制之總目錄Android
- MySQL:使用INSERT 插入多條記錄MySql
- Handler全家桶之 —— Handler 原始碼解析原始碼
- 一人一貓旅行記之Handler原理
- nutz框架使用記錄之Cnd.wrap框架
- MySQL Handler變數解析MySql變數
- Android之HandlerAndroid
- Android Handler機制之記憶體洩漏Android記憶體
- MySQL學習記錄MySql
- Mysql常用操作記錄MySql
- [- Video篇 -]:記一次Handler的使用IDE
- Handler的使用、記憶體洩漏和解決記憶體
- Android學習筆記06——handler的使用Android筆記
- 【記錄】MySQL 學習筆記MySql筆記
- [記錄] MySQL 學習筆記MySql筆記
- Oracle之記錄Oracle
- Android Handler機制之Handler 、MessageQueue 、LooperAndroidOOP
- mysql handler語句之一MySql
- Android Handler機制理解和AsyncTask使用小記Android
- 避免使用Handler而造成的記憶體洩漏記憶體
- 使用ogg 從oracle 同步mysql遇到問題記錄OracleMySql
- MySQL 使用tee記錄語句和輸出日誌MySql
- Mysql Replication學習記錄MySql
- Centos 安裝Mysql記錄CentOSMySql
- MySQL_踩坑記錄MySql
- 卡片開發使用偽類之踩坑記錄
- Mac使用記錄Mac
- phpword使用記錄PHP
- css使用記錄CSS
- vue 使用記錄Vue
- Ubuntu使用記錄Ubuntu
- jquery使用記錄jQuery
- webpack使用記錄Web
- angr使用記錄
- 提高mysql查詢效率及一些使用技巧記錄MySql