之前用CHAR的时候一个查询0点几秒。变成VARCHAR之后0.00几秒。
说一下我的数据库的特点:
数据量非常大,几十万多条。某个字段A,就是上面说的那个,长度非常长,接近255的上限。
另外我上面说的那个差别是在不查询那个字段A的情况下的数据。如果用包含用instr查询那个字段的某个SQL查询的话,VARCHAR是1秒多,CHAR是10秒多。

解决方案 »

  1.   

    如果 有很多NULL,则VARCHAR会比CHAR快。建议楼主提供更详细信息以分析。
      

  2.   

    还真有可能是你说的这个原因。我上面没说清楚,是定义的CHAR的长度非常长,而实际的数据很少有这么长的,大部分都很短,只有1%的长度是超过30的。另外将CHAR改成VARCHAR之后,数据库占用的空间明显减少,类型是VARCHAR的情况下占用100多M的空间,类型是CHAR的情况下只占10多M。
    除了这个没有其他原因了么?
      

  3.   


    你回复这贴的时候怎么就不说有的时候影响很大呢?10倍可绝对不是微小吧?
    http://bbs.csdn.net/topics/390421712
    查询速度相差十倍,占用磁盘空间也相差十倍,这个是巧合么?可以的话请回答一下这个问题:
    http://bbs.csdn.net/topics/390452088
      

  4.   

    ""
    "1131"
    null
    "12"
    "1"找出 like '%1%'和
    "                            "
    "1131                        "
    "                            "
    "12                          "
    "1                           ",不谈数据库,这这么两个数组,让你自己写代码在数组中搜索,你的代码会是什么? 哪个速度快?
      

  5.   

    我会加个表示字符串长度的整型变量。在汇编语言里循环次数已知的循环是不需要额外的指令进行判断的,有专门的指令LOOP。
      

  6.   


    那就按照设想,自己运算一下,给每个VARCHAR加上长度整数。 CAHR的不用加了,都要是相同的。
    然后在这些VARCHAR或CHAR中搜索 12345. 看看算法效率对比是什么样"1" / 长度=2
    "1                                          " / 长度 =100
      

  7.   


    那就按照设想,自己运算一下,给每个VARCHAR加上长度整数。 CAHR的不用加了,都要是相同的。
    然后在这些VARCHAR或CHAR中搜索 12345. 看看算法效率对比是什么样"1" / 长度=2
    "1                                          " / 长度 =100

    我昨天搞错了,VARCHAR快的原因好像是我加了ORDER BY的原因,正常只搜索字符串的话还是CHAR快。可见MySQL可能还是对CHAR的搜索进行优化了。
    UPDATE tablename SET field1=length(field2)
    SELECT * FROM tablename WHERE instr(left(field2,field1),'abc') ORDER BY field3
    这个是最慢的。
    还有今天测的时候速度好像不是10倍了。以后测试的时候还是记录一下吧,不然问题真的很麻烦。
      

  8.   

    由于上述原因,不能用该快速选择方法执行下面的查询:1.      除了MIN()或MAX(),还有其它累积函数,例如:     SELECT c1, SUM(c2) FROM t1 GROUP BY c1;
    2.      GROUP BY子句中的域不引用索引开头,如下所示:     SELECT c1,c2 FROM t1 GROUP BY c2, c3;
    3.      查询引用了GROUP BY部分后面的关键字的一部分,并且没有等于常量的等式,例如:     SELECT c1,c3 FROM t1 GROUP BY c1, c2;