Chinaunix首页 | 论坛 | 博客
  • 博客访问: 664313
  • 博文数量: 87
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2022
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-23 11:16
个人简介

西邮大三狗!!!

文章分类

全部博文(87)

文章存档

2015年(47)

2014年(40)

分类: Mysql/postgreSQL

2015-06-08 13:16:40

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条件中带入哈希值和对应的列值。
阅读(2297) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~