易截截图软件、单文件、免安装、纯绿色、仅160KB

由MySQL中char和varchar效率想到的

对比char和varchar随便在google或百度中搜一下得到的结论大概都是"char定长,varchar不定长,char要比varchar占用更多的空间,由于定长char的效率高于varchar,char最大255,varchar最大65536"更高级一点的数据是"char在存入和取出的时候,会自动把末尾的空格去掉,varchar会额外的多用1-2个字节来存放字符长度,列中有一个varchar会自动把char转换成varchar,而当varchar长度小于4时,自动的把varchar转换成char..."
一般认为空间换时间,现在磁盘又大又不值钱!
当使用全表都是char这的字段的时候,那么表属性Row_format是Fixed也就是静态表,与之对应的自然就是动态表Dynamic,静态表比动态表效率要高,主要是因为,基于两点:
1)没有碎片,每行的长度是固定,所以在频繁更新的场景下,尤其是某个字段由小变大.
2)方便数据文件指针的操作,在myisam中有一个数据文件指针的概念,是用来指向数据文件,比如在索引中指向数据文件.静态表的偏移量的固定不变的,而在动态表中每行的数据长度大小不一,就可能导致数据更多的开销
基于以上两点,所以静态表在查询,修改拥有较大优势,但是这个优势也是有适用场景的.
首先猜想char由于每次存取都会自动的削掉末尾的空格,而且数据文件也大,所以会使用更多的cpu和内存资源,尤其在取的时候,要是长短差距较大的时候,还是会很浪费操作的.
其次验证想法,首先测试插入性能,建了2张表并调用sp分别插入200W的数据
CREATE TABLE `isam_char` (
  `content` char(255) NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
CREATE TABLE `isam_vc` (
  `content` varchar(255) NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
call insert_isam(2000000,'isam_char');
call insert_isam(2000000,'isam_vc');
多次平均isam_char插入200W的数据为138.21s,而isam_vc少了约20s为119.80s,这应该是每次插入的时候,mysql要把char字段填充到255的操作.观察数据文件大小,isam_vc为235.8M而isam_char为1.4G!
再测试查询,为了保证两者一致,首先把isam_char中数据删除,再把isam_vc中数据导入isam_char中,无索引,禁闭query_cache
truncate table isam_char;##观察了下数据文件,被穷空成0
insert into isam_char select * from isam_vc;##观察了下数据文件,依然是1.4G
select * from isam_char limit 1555555,5;
select * from isam_vc limit 1555555,5;
依旧多次查询去平均值,isam_char表平均值为10.50s,而isam_vc则


相关文档:

修改MySQL 5.1 data文件夹路径

修改MySQL 5.1 data文件夹路径
我安装的这个版本的MYSQL没有data文件夹,但是可以正常使用,不知道你们的有没有呢?怎么才可以出现data文件夹呢,没有data文件夹,那我的数据库文件存放在什么地方了呢?我搜索了整个电脑都没有找到。
好心的朋友,快告诉我怎么回事?该怎么解决?
谢谢了!!!
====================== ......

连接mysql的javabean实例+简单分页

<%@ page contentType="text/html;charset=GBK" language="java" import="java.sql.*,java.util.*"%>
<html>
<head>
<title>连接mysql的javabean实例+简单分页</title>
<link href="../CSS.css" rel="stylesheet" type="text/css">
</head>
<body>
<jsp:useBean ......

mysql 自增列的创建

1.建表时就创建自增列:
create table test
(
 id int auto_increment primary key,
 name varchar(20) not null,
 password varchar(20) not null
);
insert into test values(null,'aa','aa');
insert into test values(null,'bb','bb');
注意:
      插入语句时,自 ......

如何导入导出MySQL数据库 *.sql文件操作

 
1. 概述
MySQL数据库的导入,有两种方法:
1) 先导出数据库SQL脚本,再导入;
2) 直接拷贝数据库目录和文件。
在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。
所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。
Linux下:
2. 方法一 SQL脚本形式
操作步骤如下:
2 ......

关于MySQL的LIMIT 语法小优化!

   
今天有朋友问起此类语句的优化,我大致给他介绍了下从SQL角度做简单的优化,至于应用程序方面的考虑咱暂时不考虑。
下面我来举一个
简单的例子。
考虑如下
表结构:
/*DDL Information
For - t_girl.t_page_sample*/
----------------------------------------------
Table   ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号