为了账号安全,请及时绑定邮箱和手机立即绑定

mysql 开发基础系列14 字符集

标签:
MySQL

一.  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;

复制代码

https://img1.sycdn.imooc.com//5b3f40560001232a05320086.jpg

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

https://img1.sycdn.imooc.com//5b3f40630001827505360057.jpg

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

2. 前缀索引

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

https://img1.sycdn.imooc.com//5b3f406c0001dc9510360118.jpg

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

二. 浮点数与定点数 

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

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

https://img1.sycdn.imooc.com//5b3f40750001f43302330060.jpg

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

原文出处

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消