mysql建表的优化

转载 2013年12月04日 14:10:32

High Performance MySQL上的知识点

原文章地点: http://willko.iteye.com/blog/670120

1.uuid用binary保存
建议uuid不要使用char来保存,而用binary(16)来保存。这里在长度上来讲用binary会节省一半。因为一个字符占用1个字节,而一个字节实际上可以表示0-256(2^8),用16进制的表示需要2个字节00-FF(0-256)。
优化前:SET uuid = UUID() (类型:char(36))
优化后:SET uuid = HEX(REPLACE(UUID(), '-', '')) (类型:binary(16))

2.用crc32替换长字符串的查找
如果索引列是个很长的字符串,例如url。那可以再建立一个列用来保存这个列的crc32结果,以提高索引的使用速度。
优化前:WHERE url = 'http://willko.iteye.com/' (索引:url,类型:var/char(?))
优化后:WHERE url_crc32 = CRC32('http://willko.iteye.com/') AND url = 'http://willko.iteye.com/' (索引:url_crc32,类型:unsigned int)

3.前缀索引和后缀索引
前缀索引听得比较多,优点是减少索引的长度,缺点是排序不能使用前缀索引(影响distinct/order/group),也不会出现Covering Index(只读取索引就能满足查询)。
后缀索引还是首次听到,孤陋寡闻了。因为MySQL不支持反向索引,所有有时候查询会有问题,例如字段blog保存用户的博客地址(http://willko.iteye.com),那需要查询某个域名有多少个用户就不好查询,可以用一个额外的字段反转保存。blog_reverse:moc.eyeavaj.willko://ptth,这样就很容易查到iteye.com(moc.eyeavaj)有多少用户了,并可以使用索引,也就是解决了 LIKE '%?'的问题,因为查询反转成LIKE '?%'了。

4.散列数据
散列数据就是把原本只有一条记录的散列成多条,充分利用InnoDB行锁的特性,提高并发。
例如,之前是UPDATE hit_counter SET cnt = cnt + 1 WHERE id = ?
散列后是 UPDATE hit_counter SET cnt = cnt + 1 WHERE id = ? AND slot = rand() * 100
散列后查询需要合并数据。

5.优化limit和offset
MySQL的limit工作原理就是先读取n条记录,然后抛弃前n条,读m条想要的,所以n越大,性能会越差。
优化前SQL: SELECT * FROM member ORDER BY last_active LIMIT 50,5
优化后SQL: SELECT * FROM member INNER JOIN (SELECT member_id FROM member ORDER BY last_active LIMIT 50, 5) USING (member_id)
分别在于,优化前的SQL需要更多I/O浪费,因为先读索引,再读数据,然后抛弃无需的行。而优化后的SQL(子查询那条)只读索引(Cover index)就可以了,然后通过member_id读取需要的列。

相关文章推荐

《高性能MySQL》必读章节 之 建表优化

在数据库的性能调优的过程中会涉及到很多的知识,包括字段的属性设置是否合适,索引的建立是否恰当,表结构涉及是否合理,数据库/操作系统 的设置是否正确…..其中每个topic可能都是一个领域。在我看来,在...

mysql建表、索引以及SQL性能优化

1 前言 参考了部分网上资料整理而成。 2 设计部分 2.1 设计表注意事项 2.1.1 定义字段类型 尽可能精确地定义字段类型,包括类型和长度:如不要以字符类型声明纯数字字段,业务上t...
  • bladedk
  • bladedk
  • 2014年11月11日 15:37
  • 324

15328条英文单词mysql库,带建表sql

  • 2015年01月30日 17:05
  • 1.64MB
  • 下载

建表sql语句(mysql)

  • 2012年09月12日 22:10
  • 4KB
  • 下载

MYSQL基础速成: 下载,安装,配置,远程登陆, 建数据库,建表

一篇特别基础的速成, 下载安装: 简略 官方下载页: http://dev.mysql.com/downloads   下载community verison , 社区版,免费下载安装, ...

mysql sql建表脚本

  • 2009年05月22日 11:01
  • 218B
  • 下载

mysql建库建表.

  • 2012年02月22日 16:20
  • 143KB
  • 下载

Mysql数据库 (1)建表与简单查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 #查看服务器中的数据库 SHOW DATABASES; #创建一个数据库 CREATE DATABASE IF NOT EXISTS ...

【Java开发手册之MySQL规约(一)】建表规约

【强制】表达是与否概念的字段,必须使用 is _ xxx 的方式命名,数据类型是 unsigned tinyint( 1 表示是,0 表示否 ) ,此规则同样适用于 odps 建表。 说明:...

hive 数据源 使用mysql; hive 启动报错; 加载数据 建表等基本命令

hive 数据源 使用mysql; hive 启动报错; 加载数据 建表等基本命令
  • hzdxw
  • hzdxw
  • 2016年07月20日 00:40
  • 939
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql建表的优化
举报原因:
原因补充:

(最多只允许输入30个字)