MySQL中的数据类型(2)

合成索引只能用于精确匹配的场景,在一定程度上减少了磁盘I/O,提高了查询效率。如果需要对BLOB、CLOB字段进行模糊查询,可以使用MySQL的前缀索引,即为字段的前n列创建索引。例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

 

mysql> create index idx_blob on t (content(100));

Query OK, 0 rows affected (0.09 sec)

Records: 0  Duplicates: 0  Warnings: 0

 

mysql> show index from t \G

*************************** 1. row ***************************

        Table: t

   Non_unique: 1

     Key_name: idx_blob

 Seq_in_index: 1

  Column_name: content

    Collation: A

  Cardinality: 3

     Sub_part: 100

       Packed: NULL

         Null: YES

   Index_type: BTREE

      Comment:

Index_comment:

1 row in set (0.00 sec)

 

mysql> desc select * from t where content like 'beijing%' \G

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: t

         type: ALL

possible_keys: idx_blob

          key: NULL

      key_len: NULL

          ref: NULL

         rows: 3

        Extra: Using where

1 row in set (0.00 sec)

 

(3)、不要在不必要是检索大型的BLOB或TEXT字段。

(4)、把BLOB或TEXT字段分离到单独的表中。

三、浮点数和定点数

浮点数一般用于表示含有小数部分的数值。当一个字段被定义为浮点类型以后,如果插入数据的精度超过了该列定义的实际精度,则插入值会被四舍五入到实际定义的精度值,然后插入,四舍五入的过程不会报错。MySQL中的float、double(real)用来表示浮点数。

定点数不同于浮点数,定点数实际上是用字符串形式存放的,所以定点数可以更精确的存放数据。如果插入数据的精度大于实际定义的精度,则MySQL会发出告警,但数据按照实际精度四舍五入后插入(如果是在传统模式下插入,则会报错)。在MySQL中,用decimal(或numberic)来表示定点数。

用浮点数存储数据会存在误差,在精度要求比较高的场景(如货币),应该使用定点数来存放数据。例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

 

mysql> create table b (c1 float(10,2),c2 decimal(10,2));

Query OK, 0 rows affected (0.37 sec)

 

mysql> insert into b values (131072.32,131072.32);

Query OK, 1 row affected (0.00 sec)

 

mysql> select * from b;

+-----------+-----------+

| c1        | c2        |

+-----------+-----------+

| 131072.31 | 131072.32 |

+-----------+-----------+

1 row in set (0.00 sec)

 

四、日期类型

MySQL提供的常用的日期类型有:date、time、datetime、timestamp,日期类型的选用原则:

(1)、应根据实际需要选择能够满足应用的最小存储的日期类型;

(2)、如果要记录年月日时分秒,且年代比较久远,最好使用datetime类型;

(3)、如果记录的日期要被多时区的用户所使用,那么最好使用timestamp类型。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/46a4db8b50a9ba503087ebd0e0bc9ae2.html