一.  BloB和Text

1. 合成索引
  合成索引可以提高大文本字段BLOB和Text的查询性能, 合成索引是在表中增加一个字段存放散列值,这种技术只能用于精确匹配的查询,可以使用md5()或sha1,crc23() 来生成散列值, 数值型散列值可以提高存储效率 。下面演示下

--    hash_value字段用来存储散列值
CREATE TABLE t(id VARCHAR(100),context BLOB, hash_value VARCHAR(40)) -- 插入数据 存放MD5散列值
INSERT INTO t VALUES(1, REPEAT('beijing',2),MD5(context));
INSERT INTO t VALUES(2, REPEAT('beijing',2),MD5(context));
INSERT INTO t VALUES(3, REPEAT('beijing 2008',2),MD5(context)); SELECT * FROM t;

--  查询context值为 beijing 2008的记录,通过散列值来查询
SELECT * FROM t WHERE hash_value=MD5(REPEAT('beijing 2008',2));

  上面展示了合成索引的用法,这种技术只用于精确匹配,在一定程度上减少i/0,提高查询效率,如果要使用模糊查询,可以考虑使用前缀索引。

2. 前缀索引

--  创建前缀索引,为字段前N个字符创建索引。这里是前100个字符进行模糊查询
CREATE INDEX idx_blob ON t(context(100))
-- 查看是否用到前缀索引
DESC SELECT * FROM t WHERE context LIKE 'beiing%0'

  总结: 可以考虑把blob和text列移动到第二张数据表中,把原数据表的数据列转换为固定长度的数据行格式,减少碎片。

二. 浮点数与定点数 

  浮点数一般用于含有小数部分的数值,当数据的精度超过该列定义的实际精度时,则插入值被四舍五入到实际定义的精度值。在mysql中 float,double(或real)用来表示。
  定点数则是以字符串形式存放的。当数据的精度超过该列定义的实际精度时,则mysql会警告(默认的sqlmode),但也是按照四舍五入。如果sqlmode 是在传统模式下则会报错,在mysql中 decimal或(numberic)用来表示。

--  下面看下浮点数与定点数的区别
CREATE TABLE test(c1 FLOAT(10,2),c2 DECIMAL(10,2))
INSERT INTO test VALUES(131072.32,131072.32)
SELECT * FROM test;

  从上面的例子看出c1列插入131072.32值,实际变成了131072.31值。这是由于单精度浮点数表示时产生了误差,在精度要求高的应用中(比如货币)要使用定点数。

mysql 开发基础系列13 选择合适的数据类型(下)的更多相关文章

  1. mysql 开发基础系列12 选择合适的数据类型(上)

    一. char 与varchar比较 在上图的最后一行的值只适用在"非严格模式",关于严格模式后面讲到.在“开发基础系列4“ 中讲到CHAR 列删除了尾部的空格.由于char是固定 ...

  2. mysql 开发基础系列14 字符集

    字符集是一套文字符号及其编码,比较规则的集合.第一个字符集是ascll(american standard code for information interchange).  1.  选择合适的字 ...

  3. mysql 开发基础系列11 存储引擎memory和merge介绍

    一. memory存储引擎 memoery存储引擎是在内存中来创建表,每个memory表只实际对应一个磁盘文件格式是.frm.   该引擎的表访问非常得快,因为数据是放在内存中,且默认是hash索引, ...

  4. mysql 开发基础系列17 存储过程和函数(上)

    一. 概述 存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,可以简化应用开发人员的很多工作,减少数据在数据库与应用服务器之间的传输,提高数据处理效率是有好处的.存储过程和函数的区别在 ...

  5. mysql 开发基础系列15 索引的设计和使用

    一.概述 所有mysql 列类型都可以被索引,是提高select查询性能的最佳方法. 根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种引擎对每个表至少支持16个索引,总索引长度至少为256字 ...

  6. mysql 开发基础系列8 表的存储引擎

    一. 表的存储引擎 1. 概述 插件式存储引擎是mysql数据库最重要的特性之一, 用户可以根据应用的需要选择如何存储和索引数据,是否使用事务等.在mysql 5.0里支持的引擎包括: MyISAM, ...

  7. mysql 开发基础系列1 表查询操作

    在安装完数据库后,不管是windows 还是linux平台,  mysql的sql命令都大同小异,相关命令都是相同的,每个命令结束后 都以  ;  结尾, 注意在windows平台中表名是不区分大小写 ...

  8. mysql 开发基础系列22 SQL Model

    一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql model 定义了mysql应用支持的sql语法,数据校验等,这样更容易在不同的环境中使用mysql. sql ...

  9. mysql 开发基础系列21 事务控制和锁定语句(下)

    1.  隐含的执行unlock tables 如果在锁表期间,用start transaction命令来开始一个新事务,会造成一个隐含的unlock tables 被执行,如下所示: 会话1 会话2 ...

随机推荐

  1. form表单内容JSON格式转化

    form表单提交时,对于Content-type为application/json是提交时需要转换成json格式,据说form enctype=‘application/json’这样就可以,然而在我 ...

  2. react native 学习笔记

    假设你的机器现在还没安装任何环境. 不同的操作系统.不同的目标平台,具体的步骤也会有所不同.如果你想同时开发android和ios也没问题,只需要先选一个平台开始,另一个平台的环境搭建只是稍有不同 本 ...

  3. idea快捷键(后续更新)

    自动补全当前行的标点符号 ctrl + shirt + 回车 跳到下一行 shirt +回车 复制一行 crtl + d 删除一行 ctrl + y 提示报错 alt + 回车 查看当前可以产什么参数 ...

  4. jQuery子页面获取父页面元素并绑定事件

    父页面HTML文件: <ul id="faul"> <li class="sonli">子页面列表1</li> <li ...

  5. 每日一练ACM

    2019.04.15 第1000题:A+B Problem Problem DescriptionCalculate A + B. InputEach line will contain two in ...

  6. 安装 redis 拓展

    PHP API 20121113 PHP Extension 20121212 Zend Extension 220121212 Zend Extension Build API220121212,T ...

  7. windows和ubuntu下git commit提交后如何保存和退出,回到命令行

    问题一: windows下git commit后会进入vim界面,不知道怎么操作 解决办法: 1.输入小写字母i,此时进入编辑模式,可以输入你想输入的内容 2.按下esc键,此时退出编辑模式,输入英文 ...

  8. python之路(十一)-socke开发

    socket简介 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. so ...

  9. STM32-跑马灯实验

    实验环境: STM32开发板 Keil uVision4 FlyMcu.exe 一. 建立文件夹 1.建立跟文件夹"BASE"(名称任意),再在其下建立四个子文件夹 2. 在&qu ...

  10. GodMode

    将“GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}”(不含引号)复制过去,保存即可.