CHAR 类型的这些行为可能有一点难以理解 下面通过一个具体的例子来说明 首先 我们创建一张只有一个CHAR( ) 字段的表并且往里面插入一些值
当检索这些值的时候 会发现string 末尾的空格被截断了
如果用VARCHAR( ) 字段存储相同的值 可以得到如下结果
数据如何存储取决于存储引擎 并非所有的存储引擎都会按照相同的方式处理定长和变长的字符串 Memory 引擎只支持定长的行 即使有变长字段也会根据最大长度分配最大空间 不过 填充和截取空格的行为在不同存储引擎都是一样的 因为这是在MySQL 服务器层进行处理的
返回目录高性能MySQL
编辑推荐
ASP NET MVC 框架揭秘
Oracle索引技术
ASP NET开发培训视频教程
lishixinzhi/Article/program/MySQL/201311/29687
mysql高性能随机排序第一种:MySQL 随机排序常规写法:展开目录
SELECT*FROMusersWHEREtotalScoreBETWEEN5AND100ORDERBYRAND()LIMIT100;
执行耗时 1.18s
SELECT*FROMusersWHEREtotalScoreBETWEEN5AND100ORDERBYRAND()LIMIT100;
执行耗时 1.25s
这样的耗时不能接受 。
第二种:stackoverflow 上找了一个黑科技写法:展开目录
SELECT*FROMusersWHEREtotalScoreBETWEEN5AND100ORDERBY37*(UNIX_TIMESTAMP() ^id) 0xffffLIMIT100;
执行耗时 150ms
SELECT*FROMusersWHEREtotalScoreBETWEEN5AND100ORDERBY37*(UNIX_TIMESTAMP() ^id) 0xffffLIMIT100;
执行耗时 153ms
执行耗时直接缩短至 150ms,已经比上一个写法快很多了,而且 LIMIT 1000 时耗时也是 150ms 左右 。
第三种方式:展开目录
SELECT*
FROMusersASu
INNERJOIN(SELECTidFROMusersWHEREtotalScoreBETWEEN5AND100ORDERBYRAND()LIMIT100)AStONt.id=u.id
WHERE1
执行耗时 110ms
LIMIT 1000 时耗时也稳定在 110ms 左右 。
耗时最少 , 推荐使用第三种 。
高性能MySQL:只修改.frm 文件只修改 frm 文件
从上面的例子我们看到修改表的 frm 文件是很快的 但MySQL 有时候会在没有必要的时候也重建表 如果愿意冒一些风险 可以让MySQL 做一些其他类型的修改而不用重建表
我们下面要演示的技巧是不受官方支持的 也没有文档记录 并且也可能不能正常工作 采用这些技术需要自己承担风险 建议在执行之前首先备份数据!
下面这些操作是有可能不需要重建表的
移除(不是增加)一个列的 AUTO_INCREMENT属性
增加 移除 或更改ENUM和SET常量 如果移除的是已经有行数据用到其值的常量 查询将会返回一个空字串值
基本的技术是为想要的表结构创建一个新的 frm 文件 然后用它替换掉已经存在的那张表的 frm 文件 像下面这样
创建一张有相同结构的空表 并进行所需要的修改(例如增加ENUM 常量)
执行FLUSH TABLES WITH READ LOCK 这将会关闭所有正在使用的表 并且禁止任何表被打开
交换 frm 文件
执行UNLOCK TABLES 来释放第 步的读锁
下面以给sakila film 表的rating 列增加一个常量为例来说明 当前列看起来如下
返回目录高性能MySQL
编辑推荐
ASP NET MVC 框架揭秘
Oracle索引技术
ASP NET开发培训视频教程
lishixinzhi/Article/program/MySQL/201311/29671
怎么构建高性能mysql的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql高可用搭建、怎么构建高性能mysql的信息别忘了在本站进行查找喔 。
推荐阅读
- 服务器开发框架,服务端开发框架
- python气象数据插值,python绘制气象图
- 安卓手机上装ios虚拟机,安卓手机怎么安装ios虚拟机
- 问道更新鸿蒙桌面布置免费,鸿蒙问道游戏
- 怎么发mysql给好友 mysql怎么把表发给别人
- 公交乘客数据分析python,公交 数据分析
- flutter调用android方法,flutter如何调用android原生功能
- wps中ppt怎么做,wps里ppt怎么做
- C语言编写素数函数 素数c语言程序函数