mysql --Bitmaps算法分析

    在mysql数据库中,对于字段性别等特殊字段,可能需要八个变量存储,就算你用tinyint(1),也是不划算的。对于这八个变量至少占用8个字节。但是采用位图,一个字节足矣。我们用一个比特位代表true和false值,而8个变量可缩写成01000010,表示该男性处于未婚状态,户口所在地北京,无研究生学历,共占用一个字节。这样可以节省空间,也提高了处理速度,其实用位图可以理解为位映射。

    在mysys/目录下的my_bitmap.c文件包含各种操作位图的函数

     ====》设置和拆除操作:

my_bool bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits,

   my_bool thread_safe __attribute__((unused)))

void bitmap_free(MY_BITMAP *map)

{

 DBUG_ENTER("bitmap_free");

 if (map->bitmap)

 {

#ifdef THREAD

   if (map->mutex)

     pthread_mutex_destroy(map->mutex);

#endif

   my_free((char*) map->bitmap, MYF(0));

   map->bitmap=0;

 }

 DBUG_VOID_RETURN;

}

而在拆除中:

if (map->mutex)

     pthread_mutex_destroy(map->mutex);



======》设置和清理整个比特位图或一个具体的比特位

     bitmap_set_bit(map, test_bit);   调用

    函数原型:

uint bitmap_bits_set(const MY_BITMAP *map)

{  

 uchar *m= (uchar*)map->bitmap;

 uchar *end= m + no_bytes_in_map(map);

 uint res= 0;


 DBUG_ASSERT(map->bitmap);

 *map->last_word_ptr&= ~map->last_word_mask; /*Reset last bits to zero*/

 while (m < end)

   res+= my_count_bits_ushort(*m++);

 return res;

}

     

本文出自 “Linux运维” 博客,请务必保留此出处http://2853725.blog.51cto.com/2843725/1379930

mysql --Bitmaps算法分析,布布扣,bubuko.com

mysql --Bitmaps算法分析

上一篇:Oracle 11G INDEX FULL SCAN 和 INDEX FAST FULL SCAN 对比分析


下一篇:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'(Windows平台)