可以啊,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));
中文官方手册中也有这个说明,虽然讲得不如英文版的清楚。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语句中的前缀长度指的是字符的数目。对于使用多字节字符集的列,在指定列的前缀长度时,要考虑这一点。
select mid(1234567890,1,8)
因为多数名称的前10个字符通常不同,所以此索引不会比使用列的全名创建的索引速度慢很多。另外,使用列的一部分创建索引可以使索引文件大大减小,从而节省了大量的磁盘空间,有可能提高INSERT操作的速度。前缀最长为255字节。对于MyISAM和InnoDB表,前缀最长为1000字节。注意前缀的限长以字节计,而CREATE INDEX语句中的前缀长度指的是字符的数目。对于使用多字节字符集的列,在指定列的前缀长度时,要考虑这一点。
SUBSTRING(str,pos,len). 函数或者它的同义词 MID(str,pos,len)
跟INT(6)啥的存放东东占磁盘的空间是一样的,都是4个字节。您这样的需求只能用CHAR(10)来代替,不过CHAR(10)占了11个字节,在没有多字符集编码的情况下!
用id号码右移动8位后所得的建立索引
比如
200 11001000
300 100101100?
如果这样,倒是比较复杂了。
+------------------+--------------------+-----------------+
| bin(65535) | bin(65535 div 256) | bin(65535 >> 8) |
+------------------+--------------------+-----------------+
| 1111111111111111 | 11111111 | 11111111 |
+------------------+--------------------+-----------------+
1 row in set (0.00 sec)mysql>
MEMORY,NDB,以及INNODB!