mysql数据类型与索引调优
2016-06-16 11:22
239 查看
varcha比固定长度占用更少存储空间,只占用需要空间,但是需要1字节保存长度
更小通常更好
简单就好,避免null
确定类型
使用enum代替字符串类型
innnodb存储引擎
事务性
外键
行级锁
多版本
按照主键聚集
所有索引包含主键列
优化的缓存:innodb把数据和内存缓存缓冲到缓存池 自动构建哈希索引
未压缩索引:索引没有使用前缀压缩,阻塞auto_increment;innodb使用表级锁产生新的auto_increment
没有缓存的count():myisam会把行数保存在表中 innodb中的count会全表扫描或索引扫描
可以适当的使用前缀索引
select count(disinct name) / count(*) from area
select count (disinct left(name, 3)) / count(*) from area
聚集索引
innodb索引保存了b-tree索引和数据行
覆盖索引
explain解释器的extra列看到using index
满足条件:
select 查询字段必须有索引全覆盖,不能在索引执行like操作
不要在选择性很差的列添加索引
check table
repair table
myisamchk
更新索引统计
1.analyze table test
show index
减少索引和数据碎片
myisam引擎: optimize table
innodb引擎:alter table engine =
表周期性创建
周期创建可以得到没有碎片和全排序索引高效表
drop table if exists area_new,area_old
create table area_new like area;
rename table area to area_old.area_new to area;
更小通常更好
简单就好,避免null
确定类型
使用enum代替字符串类型
innnodb存储引擎
事务性
外键
行级锁
多版本
按照主键聚集
所有索引包含主键列
优化的缓存:innodb把数据和内存缓存缓冲到缓存池 自动构建哈希索引
未压缩索引:索引没有使用前缀压缩,阻塞auto_increment;innodb使用表级锁产生新的auto_increment
没有缓存的count():myisam会把行数保存在表中 innodb中的count会全表扫描或索引扫描
可以适当的使用前缀索引
select count(disinct name) / count(*) from area
select count (disinct left(name, 3)) / count(*) from area
聚集索引
innodb索引保存了b-tree索引和数据行
覆盖索引
explain解释器的extra列看到using index
满足条件:
select 查询字段必须有索引全覆盖,不能在索引执行like操作
不要在选择性很差的列添加索引
check table
repair table
myisamchk
更新索引统计
1.analyze table test
show index
减少索引和数据碎片
myisam引擎: optimize table
innodb引擎:alter table engine =
表周期性创建
周期创建可以得到没有碎片和全排序索引高效表
drop table if exists area_new,area_old
create table area_new like area;
rename table area to area_old.area_new to area;
相关文章推荐
- 我是运营,我没有假期
- 页面缓存:内存和文件之间的那些事
- DB2数据库的安装
- C#实现把指定数据写入串口
- “传奇”图象数据存储方式
- PostgreSQL教程(八):索引详解
- Oracle外键不加索引引起死锁示例
- oracle 索引的相关介绍(创建、简介、技巧、怎样查看) .
- 修复mysql数据库
- 用SQL建立索引的方法步骤
- SQL2005重新生成索引的的存储过程 sp_rebuild
- SQL效率提升之一些SQL编写建议并有效利用索引
- SQLSERVER的非聚集索引结构深度理解
- SQL Server误区30日谈 第8天 有关对索引进行在线操作的误区
- SQL Server 索引介绍
- 浅析SQL数据操作语句
- SQLServer 数据导入导出的几种方法小结
- 浅析SQL Server中的执行计划缓存(上)
- SqlServer 索引自动优化工具
- 简述MySQL分片中快速数据迁移