1、哈希索引只包含哈希值和行指针,而不是存储字段值,所以不能使用索引中的值来避免读取行。不过,访问内存中的行的速度很快。
2、哈希索引数据并不是按照列匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值的。for example:在数据列(A,B)上建立哈希索引,如果查询只有数据列A,则无法使用该索引。
3、哈希索引数据并不是按照索引顺序存储的,所以也就无法用于排序。
4、哈希索引只用于等值查找。
5、访问哈希索引速度非常快,除非有很多冲突。
6、哈希索引冲突多的话,维护代价比较高。
索引的优点:
1、大大减少了服务器需要扫描的数据量
2、可以帮助服务器避免排序和临时表
3、可以将随机I/O变为顺序I/O
例子:
mysql> use test;
Database changed
mysql> create table url(
-> id int not null auto_increment,
-> url varchar(255) not null,
-> url_crc int unsigned not null default 0,
-> primary key(id)
-> );
mysql> insert into url(url) value('
');
Query OK, 1 row affected (0.00 sec)
mysql> select * from url;
+----+--------------+---------+
| id | url | url_crc |
+----+--------------+---------+
| 1 |
| 0 |
+----+--------------+---------+
1 row in set (0.00 sec)
mysql> insert into url(url,url_crc) value('
',crc32('
'));
Query OK, 1 row affected (0.00 sec)
mysql> select * from url;
+----+--------------+------------+
| id | url | url_crc |
+----+--------------+------------+
| 1 |
| 0 |
| 2 |
| 3262081370 |
+----+--------------+------------+
mysql> delimiter //
mysql> create trigger url_crc_ins before insert on url for each row begin
-> set new.url_crc=crc32(new.url);
-> end;
-> //
Query OK, 0 rows affected (0.06 sec)
mysql> create trigger url_crc_upd before update on url for each row begin
-> set new.url_crc=crc32(new.url);
-> end;
-> //
Query OK, 0 rows affected (0.06 sec)
mysql> delimiter ;
mysql> insert into url(url) values('
')
-> ;
Query OK, 1 row affected (0.00 sec)
mysql> select * from url;
+----+--------------+------------+
| id | url | url_crc |
+----+--------------+------------+
| 3 |
| 3262081370 |
| 2 |
| 3262081370 |
+----+--------------+------------+
2 rows in set (0.00 sec)
mysql> update url set url='
' where id=2;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select * from url;
+----+--------------+------------+
| id | url | url_crc |
+----+--------------+------------+
| 3 |
| 3262081370 |
| 2 |
| 3262081370 |
+----+--------------+------------+
2 rows in set (0.00 sec)
有效避免哈希冲突:
查询时,在where条件中带入哈希值和对应的列值。
阅读(2312) | 评论(0) | 转发(0) |