目录

 

1.字段类型选择注意事项:

2.创建索引的注意事项

3.使用索引要注意的事项


1.字段类型选择注意事项:

1). 主键 使用bigint类型  选择snowflake建立全局唯一ID;

2). 能使用int类型的,尽量使用int类型。如“状态“,“代码” 选择SMALLINT类型;

3). 使用varchar类型的,可选择varchar(255);占用存储空间按实际长度+1

4). 货币类字段,使用Decimal和Numric类型表示,decimal(10,2)  共有10个数字,其中小数2位。存储空间10+2。java对应类型Bigdecimal, 加减乘除使用了英文的加减乘除, 即add, substract, multiply和divide,比较大小用compareTo方法, 比较结果有-1, 0, 1, 分别表示小于, 等于, 大于; 对于0, 可以使用BigDecimal.ZERO表示! 

    (还可将币单位改为小单位,从而将小数转化为整数)。

5) 

  • 当字段可选择多个类型时(比如生日字段,可以用时间戳,即整数类型,可以用字符串 类型,也可以用日期 类型):整数、二进制 优于 日期 优于 字符串。

mysql字段类型与java类型对应表

MySQL Type Name

Return value ofGetColumnClassName

Returned as Java Class

BIT(1) (new in MySQL-5.0)

BIT

java.lang.Boolean

BIT( > 1) (new in MySQL-5.0)

BIT

byte[]

TINYINT

TINYINT

java.lang.Boolean if the configuration property tinyInt1isBit is set to true(the default) and the storage size is 1, orjava.lang.Integer if not.

BOOL, BOOLEAN

TINYINT

See TINYINT, above as these are aliases forTINYINT(1), currently.

SMALLINT[(M)] [UNSIGNED]

SMALLINT [UNSIGNED]

java.lang.Integer (regardless if UNSIGNED or not)

MEDIUMINT[(M)] [UNSIGNED]

MEDIUMINT [UNSIGNED]

java.lang.Integer, if UNSIGNEDjava.lang.Long

INT,INTEGER[(M)] [UNSIGNED]

INTEGER [UNSIGNED]

java.lang.Integer, if UNSIGNEDjava.lang.Long

BIGINT[(M)] [UNSIGNED]

BIGINT [UNSIGNED]

java.lang.Long, if UNSIGNEDjava.math.BigInteger

FLOAT[(M,D)]

FLOAT

java.lang.Float

DOUBLE[(M,B)]

DOUBLE

java.lang.Double

DECIMAL[(M[,D])]

DECIMAL

java.math.BigDecimal

DATE

DATE

java.sql.Date

DATETIME

DATETIME

java.sql.Timestamp

TIMESTAMP[(M)]

TIMESTAMP

java.sql.Timestamp

TIME

TIME

java.sql.Time

YEAR[(2|4)]

YEAR

If yearIsDateType configuration property is set to false, then the returned object type isjava.sql.Short. If set to true (the default) then an object of type java.sql.Date (with the date set to January 1st, at midnight).

CHAR(M)

CHAR

java.lang.String (unless the character set for the column is BINARY, then byte[]is returned.

VARCHAR(M) [BINARY]

VARCHAR

java.lang.String (unless the character set for the column is BINARY, then byte[]is returned.

BINARY(M)

BINARY

byte[]

VARBINARY(M)

VARBINARY

byte[]

TINYBLOB

TINYBLOB

byte[]

TINYTEXT

VARCHAR

java.lang.String

BLOB

BLOB

byte[]

TEXT

VARCHAR

java.lang.String

MEDIUMBLOB

MEDIUMBLOB

byte[]

MEDIUMTEXT

VARCHAR

java.lang.String

LONGBLOB

LONGBLOB

byte[]

LONGTEXT

VARCHAR

java.lang.String

ENUM('value1','value2',...)

CHAR

java.lang.String

SET('value1','value2',...)

CHAR

java.lang.String

2.创建索引的注意事项

频繁作为查询条件的字段适合建立索引;
查询中与其它表关联的字段,外键关系建立索引;
单值和复合索引,优先选择复合索引;
查询中排序的字段,排序字段若通过索引去访问将大大提高查询速度;
查询中统计或者分组字段要建立索引;
where条件里用不到的字段不创建索引;
对于单键索引,尽量针对当前查询过滤性好的索引;
在选择组合索引的时候,当前查询中过滤性最好的字段在索引字段的顺序中,位置越靠前越好;
在选择组合索引的时候,尽量选择可以能够包含当前查询中的where子句中更多字段的索引;
尽可能通过分析统计信息和调整查询的写法来达到选择合适索引的目的;
频繁更新的字段不要建立索引;

3.使用索引要注意的事项

对于字符串索引,一定要加引号;
如果索引了多列,要遵循最佳左前缀原则;
不要在索引上做任何操作,会导致索引失效,而转向全表扫描;
存储引擎不能使用范围条件右边的列;
不等于、or都会使索引失效;