MySQL之动态表特征
如果一个MyISAM表包含任何可变长度列(VARCHAR, BLOB或TEXTDynamic),或者如果一个表被用ROW_FORMAT=DYNAMIC选项来创建,动态存储格式被使用。
这个格式更为复杂一点,因为每行有一个表明行有多长的头。当一个记录因为更新的结果被变得更长,该记录也可以在超过一个位置处结束。
你可以使用OPTIMIZE TABLE或myisamchk来对一个表整理碎片。如果在一个表中有你频繁访问或改变的固定长度列,表中也有一些可变长度列,仅为避免碎片而把这些可变长度列移到其它表可能是一个好主意。
动态格式表的一般特征:
· 除了长度少于4的列外,所有的字符串列是动态的。
· 在每个记录前面是一个位图,该位图表明哪一列包含空字符串(对于字符串列)或者0(对于数字列)。注意,这并不包括包含NULL值的列。如果一个字符列在拖曳空间移除后长度为零,或者一个数字列为零值,这都在位图中标注了且列不被保存到磁盘。 非空字符串被存为一个长度字节加字符串的内容。
· 通常比固定长度表需要更少的磁盘空间。
· 每个记录仅使用必需大小的空间。尽管如此,如果一个记录变大,它就按需要被分开成多片,造成记录碎片的后果。比如,你用扩展行长度的信息更新一行,该行就变得有碎片。在这种情况下,你可以时不时运行OPTIMIZE TABLE或myisamchk -r来改善性能。可使用myisamchk -ei来获取表的统计数据。
· 动态格式表在崩溃后要比静态格式表更难重建,因为一个记录可能被分为多个碎片且链接(碎片)可能被丢失。
· 动态尺寸记录期望的行长度用下列表达式来计算:
· 3
· + (number of columns + 7) / 8
· + (nu
相关文档:
mysql文件导入乱码问题的解决:
1 命令察看字符设置。
mysql> show variables like "%char%";
2 将不是utf-8的都改成utf8。只有filesystem不变;
| Variable_name | Value
&nb ......
今天在数据库中插入了中文,发现有的是乱码,有的不是,很是纳闷。
最后找到了解决办法:
打开 /etc/mysql/my.cnf
在[mysqld]和[client]节下分别添加:
default-character-set = utf8
然后重新启动mysql,需要注意的是,对修改以前创建的数据库来说,他的字符集还是原来的,所以还是会出现乱马,而新创建的数据 ......
索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据。如果一个表有1000行,这比顺序读取至少快100倍。注意如果你需要访问 ......
mysql 数据库默认的连接只能在本机连接,远程连接必须授权。
代码: 全选
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED
BY 'mypassword' WITH GRANT
OPTION;如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用
mypassword作为密码
代码: GRANT ALL PR ......
SQL标准在数据存储的物理方面没有提供太多的指南。SQL语言的使用独立于它所使用的任何数据结构或图表、表、行或列下的介质。但是,大部分高级数据库管理系统已经开发了一些根据文件系统、硬件或者这两者来确定将要用于存储特定数据块物理位置的方法。在MySQL中,InnoDB存储引擎长期支持表空间的概念,并且MySQL服务器甚至在 ......