[摘要]+------+--------------------------+----------------------------------+1 row in set (0.00 sec)合成索引只能...
+------+--------------------------+----------------------------------+
1 row in set (0.00 sec)
合成索引只能用于精确匹配的场景,在一定程度上减少了磁盘I/O,提高了查询效率。如果需要对BLOB、CLOB字段进行模糊查询,可以使用MySQL的前缀索引,即为字段的前n列创建索引。例如:
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)来表示定点数。
用浮点数存储数据会存在误差,在精度要求比较高的场景(如货币),应该使用定点数来存放数据。例如:
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;
+-----------+-----------+
关键词:所有方面知道MySQL中的数据分类