如果不行
mysql有没有函数取得int(10)的前八位?

解决方案 »

  1.   

    mysql有没有函数取得int(10)的前八位?
    select mid(1234567890,1,8)
      

  2.   

    不能,可以新建立一个字段,替换此字段为Int(10)的前八位,再在此字段上建立索引
      

  3.   

    可以啊,MySQL对CHAR索引可以实现部分索引,即仅取char前面的部分字符建立索引。Indexes can be created that use only the leading part of column values, using col_name(length) syntax to specify an index prefix length: Prefixes can be specified for CHAR, VARCHAR, BINARY, and VARBINARY columns. BLOB and TEXT columns also can be indexed, but a prefix length must be given. Prefix lengths are given in characters for non-binary string types and in bytes for binary string types. That is, index entries consist of the first length characters of each column value for CHAR, VARCHAR, and TEXT columns, and the first length bytes of each column value for BINARY, VARBINARY, and BLOB columns. For spatial columns, prefix values cannot be given, as described later in this sectionThe statement shown here creates an index using the first 10 characters of the name column: CREATE INDEX part_of_name ON customer (name(10));
    
      

  4.   

    中文官方手册中也有这个说明,虽然讲得不如英文版的清楚。http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#create-index对于CHAR和VARCHAR列,只用一列的一部分就可创建索引。创建索引时,使用col_name(length)语法,对前缀编制索引。前缀包括每列值的前length个字符。BLOB和TEXT列也可以编制索引,但是必须给出前缀长度。此处展示的语句用于创建一个索引,索引使用列名称的前10个字符。CREATE INDEX part_of_name ON customer (name(10));
    因为多数名称的前10个字符通常不同,所以此索引不会比使用列的全名创建的索引速度慢很多。另外,使用列的一部分创建索引可以使索引文件大大减小,从而节省了大量的磁盘空间,有可能提高INSERT操作的速度。前缀最长为255字节。对于MyISAM和InnoDB表,前缀最长为1000字节。注意前缀的限长以字节计,而CREATE INDEX语句中的前缀长度指的是字符的数目。对于使用多字节字符集的列,在指定列的前缀长度时,要考虑这一点。
      

  5.   


     SUBSTRING(str,pos,len).  函数或者它的同义词 MID(str,pos,len) 
      

  6.   

    LZ的想法是可以的,不过LZ忽视了一点。INT(10)存放的只是显示的宽度,
    跟INT(6)啥的存放东东占磁盘的空间是一样的,都是4个字节。您这样的需求只能用CHAR(10)来代替,不过CHAR(10)占了11个字节,在没有多字符集编码的情况下!
      

  7.   

    那mysql支持用自己的函数经过一定的运算后建立索引?比如 id >> 8 
    用id号码右移动8位后所得的建立索引
      

  8.   

    id >> 8 ,你要用 binary 的前八位做索引?
    比如
    200  11001000
    300 100101100?
    如果这样,倒是比较复杂了。
      

  9.   

    取INT的前8 bit 建索引不行,但取前8bit可以用你的 >>8 或者 div 256mysql> select bin(65535),bin(65535 div 256),bin(65535 >> 8);
    +------------------+--------------------+-----------------+
    | bin(65535)       | bin(65535 div 256) | bin(65535 >> 8) |
    +------------------+--------------------+-----------------+
    | 1111111111111111 | 11111111           | 11111111        |
    +------------------+--------------------+-----------------+
    1 row in set (0.00 sec)mysql>
      

  10.   

    MySQL中只有NBD存储引擎支持HASH索引
      

  11.   

    MySQL中有三种引擎支持HASH索引!
    MEMORY,NDB,以及INNODB!