mysql 索引的创建与优化 学习笔记
来源:互联网 发布:淘宝账号贷款 编辑:程序博客网 时间:2024/05/18 02:04
一. explain
explain可以用来解析mysql如何处理select语句和链接的表,可以更好的用来调整索引和优化sql语句。
explain各字段说明:
id: 查询标识符,用来标记查询顺序
select_type:选择类型, simple:简单查询
primary:最外层的子查询
union:union的后一条语句
table:读取的表
type:连接类型 system:表仅有一行,const的特例,一般不会出现
const:表最多只有一行匹配,可以认为是最优化的结果
eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使
用且索引是unique或primary key
ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或
PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。ref可
以 用于使用=或<=>操作符的带索引的列。
all:全表的扫描,在通常情况下很差。
possilble_keys:可能使用到的索引
key:实际使用的索引
key_len:索引长度
ref:ref列显示使用哪个列或常数与key一起从表中选择行。
rows:必须检查的行数
extra:该列包含MySQL解决查询的详细信息。
关于explain的各字段具体含义 请参考 http://database.51cto.com/art/201108/285341.htm
二. 索引的建立与优化
mysql支持的索引类型有 hash索引,B-tree索引,R-tree索引,全文索引等,使用比较广泛的是B-tree索引。
B-tree索引的一些注意点:
假设我们建立了索引 (a,b,c),该索引代表了我们同时创建了(a),(a,b),(a,b,c)三个索引
1.不能跳过前面的索引,即如果查询是 (b,c)则不会使用这个索引
2.不能跳过索引,即(a,c)查询不会使用这个索引
3.如果查询中有范围查询,则不会使用右边的索引,即假如查询中有 b LIKE, 则只会(a)索引
4.查询表达式中不能含有函数,或者表达式,例如sql : select * from table where a+1=5则不能使用(a)索引。
5.索引中不会包含null值,所以尽量不要让字段的默认值是null
6.如果要对 varchar进行索引并且varchar的长度很长,尽量使用短索引,只对前10到20个字符进行索引
7.注意索引的顺序,当不需要考虑排序和分组时,将选择性最高的列放在前面一般来说是最好的;有时候还需要根据运行的频率来决定索引的顺序。
8.NOT IN 和<> 都会进行全局扫面,从而不会使用索引。
9.对于记录比较少的表,就没有必要加索引了,反而浪费空间
10.对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义。
三. linux下完全删除mysql
rpm -qa | grep mysql
sudo rpm -e --ndoeps ******mysql***
删除/var/lib/mysql
mysql.user表中,修改密码用 password()函数,然后 FLUSH PRIVILEGES;
- mysql 索引的创建与优化 学习笔记
- sql学习笔记(15)-----------MySQL 索引与优化总结
- mysql学习笔记(2)-创建MySQL索引
- MySQL的索引与优化
- MySQL的索引与优化
- MySQL的索引与优化
- MySQL的索引与优化
- MySQL学习笔记(23)-----------索引优化
- MySQL索引优化笔记
- mysql索引的学习笔记
- sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)
- mysql 索引与优化
- MySQL索引与优化
- MySQL索引与优化
- MYSQL 索引与优化
- Mysql索引与优化
- Mysql 索引与优化
- MYSQL索引与优化
- 设计模式之builder(建造者模式)
- 11
- 函数库
- 事件溯源(Event Sourcing)
- Activity之间的通信
- mysql 索引的创建与优化 学习笔记
- MySql日期处理系列-日期截取/转换方法
- MySQL与Oracle 差异比较之三函数
- 第一次用IntelliJ Idea写web程序时配置Tomcat遇到的问题
- HTML标签
- MySQL与Oracle 差异比较之四条件循环语句
- ZOJ 3213 Beautiful Meadow
- 线程同步
- 学习api