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建表优化考虑事项

1.  char与varchar char :长度固定,比较适合存储很短(比如门牌号码101,201)、固定长度(比如使用uuid作为主键)、十分频繁改变的column的字段;char(M)类型的数...
  • qc20042
  • qc20042
  • 2013年04月12日 16:35
  • 2602

MySQL单表查询优化技巧

本文的原文地址在此:https://www.percona.com/blog/2015/04/27/indexing-101-optimizing-mysql-queries-on-a-single-...
  • zhu19774279
  • zhu19774279
  • 2015年06月23日 16:55
  • 3039

提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)

 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null...
  • top_gun_1
  • top_gun_1
  • 2016年02月23日 14:33
  • 1485

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

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

MYSQL建表优化考虑事项

1.  char与varchar char :长度固定,比较适合存储很短(比如门牌号码101,201)、固定长度(比如使用uuid作为主键)、十分频繁改变的column的字段;char(M)类型的数...
  • qc20042
  • qc20042
  • 2013年04月12日 16:35
  • 2602

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

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

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

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

建表sql语句(mysql)

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

mysql批量建表

  • 2018年01月05日 15:34
  • 3KB
  • 下载

mysql sql建表脚本

  • 2009年05月22日 11:01
  • 218B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql建表的优化
举报原因:
原因补充:

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