在mysql的myisam引擎中,有一个是容易忽视的,叫压缩索引PACK_KEYS ,
myISAM使用前缀压缩来减小索引大小,默认情况下会压缩字符串,也可以压缩整数
可以使用create table时用PACK_KEYS控制索引压缩的方式。
PACK_KEYS在MySQL手册中如下描述:
如果您希望索引更小,则把此选项设置为1。这样做通常使更新速度变慢,同时阅读速度加快。把选项设置为0可以取消所有的关键字压缩。把此选项设置为DEFAULT时,存储引擎只压缩长的CHAR或VARCHAR列(仅限于MyISAM)。
如果您不使用PACK_KEYS,则默认操作是只压缩字符串,但不压缩数字。如果您使用PACK_KEYS=1,则对数字也进行压缩。
在对二进制数字关键字进行压缩时,MySQL采用前缀压缩:
o 每个关键字需要一个额外的字节来指示前一个关键字中有多少字节与下一个关键字相同。
o 指向行的指针以高位字节优先的顺序存储在关键字的后面,用于改进压缩效果。
这意味着,如果两个连续行中有许多相同的关键字,则后续的“相同”的关键字通常只占用两个字节(包括指向行的指针)。与此相比,常规情况下,后续的关键字占用storage_size_for_key + pointer_size(指针尺寸通常为4)。但是,只有在许多数字相同的情况下,前缀压缩才有好处。如果所有的关键字完全不同,并且关键字不能含有NULL值,则每个关键字要多使用一个字节。(在这种情况中,储存压缩后的关键字的长度的字节与用于标记关键字是否为NULL的字节是同一字节。
比如有个字段保存 文件名,如"abc.pdf",其中pdf大家都是一样的,因此可以
根据这个字段采用压缩索引:
CREATE TABLE <TABLE_NAME> (
`id` INT NOT NULL ,
`name` VARCHAR(250) NULL ,
PRIMARY KEY (`id`) )
PACK_KEYS = 1;
ALTER TABLE table_name PACK_KEYS = 1;
分享到:
相关推荐
navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql...
navicat110_mysql_cs_x86,Mysql专用,仅可连接Mysql数据库,内附破觚工具,Win10可用
tar zxvf navicat112_mysql_cs_x64.tar.gz 进入解压的目录,运行如下命令 ./start_navicat 问题一:中文乱码 解决:打开start_navicat文件 将export LANG="en_US.UTF-8"改为export LANG="zh_CN.UTF-8" 问题二:试用...
navicat_for_mysql_10.0.1_cn_linux.tar安装包 下载后copy到指定安装目录 ...[hcr@localhost navicat111_mysql_en]$ tar -zxvf navicat111_mysql_en.tar.gz [hcr@localhost navicat111_mysql_en]$ ./start_navicat
windows下 navicat120_mysql_en_x64数据库可视化工具
因此,"navicat_for_mysql_10.0.11_cn_linux.tar.gz"是一个包含Navicat for MySQL 10.0.11中文版的Linux兼容安装包。 安装步骤如下: 1. **解压文件**:使用`tar`命令解压文件。打开终端,输入: ``` tar -zxvf ...
使用`mysql_query()`函数提交SQL语句,然后调用`mysql_store_result()`或`mysql_use_result()`来处理结果集。例如,执行一个简单的SELECT查询: ```c const char *query = "SELECT * FROM table"; if (mysql_query...
对于查询操作,可以使用`mysql_query()`执行SELECT语句,然后通过`mysql_store_result()`获取结果集,进一步使用`mysql_fetch_row()`遍历每一行数据: ```c sql = "SELECT * FROM Employees"; MYSQL_RES *result = ...
标题中的"win32-DevC-mysql.zip_C MYSQL_MYSQL_c mysql_dev c++ _mysql c++"提到了几个关键元素,分别是"win32"、"DevC++"、"mysql"以及"C++"。这表明该压缩包可能包含了一组用于在Windows 32位环境下,使用DevC++...
navicat112_mysql_en_x64 访问数据库工具
压缩包中包含navicat_for_mysql_10.0.11_cn_linux.tar.gz的安装包及其安装及配置步骤!由于linux里安装Navicat需要安装另一个环境wine,其安装很繁琐,而本Navicat安装包中已经自带wine环境,不需要另外安装wine环境...
数据库管理工具 navicat150_mysql_cs_x64.exe 下载 支持多国语言 Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。
2. **MYSQL_connect驱动**:在C语言中,`mysql_connect()`函数是用于连接MySQL服务器的一个老式接口,它已经不再推荐使用,但在这里可能作为示例被提及。新版本的API推荐使用`mysql_real_connect()`,因为它提供了更...
本资源“mysql_lib.rar”包含的是针对C和C++编程语言的MySQL连接库,使得开发者能够在VC++环境中与MySQL数据库进行交互。在本文中,我们将详细探讨MySQL与VC++的集成以及相关知识点。 首先,`mysql.h`是MySQL C API...
1. `mysql_time.h`:这个头文件提供了关于时间、日期和时间戳的结构体和函数,用于处理与MySQL数据库中的日期和时间数据类型相关的操作。其中最重要的结构体是`MYSQL_TIME`,它包含年、月、日、小时、分钟、秒等信息...
3. 结果集处理:当执行查询语句后,可以使用mysql_store_result()将结果存储在内存中,然后通过mysql_fetch_row()遍历每一行数据。 4. 错误处理:C API提供了mysql_errno()和mysql_error()函数,以便在出现问题时...
这个例子中,`mysql_init()`初始化一个MySQL连接对象,`mysql_real_connect()`用于建立连接,`mysql_query()`执行SQL查询,`mysql_use_result()`获取查询结果集,`mysql_fetch_row()`遍历结果集中的每一行,最后`...
总的来说,"mysql_test_c__by_wy.rar"中的示例展示了如何使用MySQL C API进行基本的数据库操作,包括连接、查询、插入、更新和删除数据。通过学习这个示例,开发者可以更好地理解和应用MySQL C API来构建自己的...
3. **结果集处理**:如果查询返回结果,需要使用`mysql_store_result()`或`mysql_use_result()`获取结果集,然后遍历`MYSQL_RES`结构体中的`MYSQL_ROW`来处理数据。 4. **错误处理**:在执行数据库操作时,需要检查...
lib_mysqludf_sys可能是MySQL用户定义函数(User-Defined Function, UDF)的一个实现,允许用户在MySQL数据库中自定义计算逻辑。 **关于lib_mysqludf_sys** lib_mysqludf_sys可能是一个扩展了MySQL功能的库,提供...