mysql一: 索引优化
来源:互联网 发布:求顶尖数据恢复注册码 编辑:程序博客网 时间:2024/06/04 19:05
一:基础知识
1.索引的存储类型有两种
myisam btreeinnodb btreememory/heap hash,btree
2.myisam表的数据文件和索引文件是分开的,innodb的数据和索引是存储在同一个表空间里面,但是可以有多个文件组成
二:检测
1.使用explain 检测
mysql> explain select count(*) from core_config_data where config_id=1;
+----+-------------+------------------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------+-------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | core_config_data | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
+----+-------------+------------------+-------+---------------+---------+---------+-------+------+-------------+
1 row in set (0.00 sec)
type 这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALLpossible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句key: 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好ref:显示索引的哪一列被使用了,如果可能的话,是一个常数 rows:MYSQL认为必须检查的用来返回请求数据的行数
其他不在详细,参看:http://blog.csdn.net/terry_water/article/details/46325275
配合语句,查看表结构:
show create table core_config_data;
2.使用系统参数查看
<pre name="code" class="html">show status like '%Handler%';
查看索引的使用量
详细参看:http://blog.csdn.net/terry_water/article/details/46324563
Handler_read_key,这个数值越大,说明使用的索引的次数越多
3.使用慢查询,把时间长的查询写入日志:
slow_query_log_file=/var/log/mysql-slow.loglong-query-time=10slow_query_log=1log-output=FILE
把时间长的查询找出来优化
4.通过访问前端,页面的加载速度,判定某个页面存在问题,然后在本地访问一个页面,开启日志:
在配置中添加
general_log=ONgeneral_log_file=/var/log/mysql/access.log
然后分析访问的sql语句,通过explain 查看每个语句执行,看看那个存在问题
5.
log-error=/var/log/mysql-error.log查看错误日志。
6
从 PROCEDURE ANALYSE() 取得建议
PROCEDURE ANALYSE() 会让 MySQL 帮你去分析你的字段和其实际的数据,并会给你一些有用的建议。只有表中有实际的数据,这些建议才会变得有用,因为要做一些大的决定是需要有数据作为基础的。
例如,如果你创建了一个 INT 字段作为你的主键,然而并没有太多的数据,那么,PROCEDURE ANALYSE()会建议你把这个字段的类型改成 MEDIUMINT 。或是你使用了一个 VARCHAR 字段,因为数据不多,你可能会得到一个让你把它改成 ENUM 的建议。这些建议,都是可能因为数据不够多,所以决策做得就不够准。
在phpmyadmin里,你可以在查看表时,点击 “Propose table structure” 来查看这些建议
一定要注意,这些只是建议,只有当你的表里的数据越来越多时,这些建议才会变得准确。一定要记住,你才是最终做决定的人。
7
查看索引使用情况
如果索引正在工作,Handler_read_key的值将很高,这个值代表了一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使用。Handler_read_rnd_next的值高则意味着查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读下一行的请求数。如果你正进行大量的表扫描,该值较高。通常说明表索引不正确或写入的查询没有利用索引。语法:
mysql> show status like 'Handler_read%';
不使用索引的情况:
mysql估计索引比全表扫描更慢,会不使用索引,例如:如果key_part1均匀分布在1和100之间,下列查询中使用索引就不是很好:
SELECT * FROM table_name where key_part1 > 1 and key_part1 < 90
2.如果使用heap表并且where条件中不用=索引列,其他> 、<、 >=、 <=均不使用索引;
3.如果不是索引列的第一部分;
4.如果like是以%开始;
5.对where后边条件为字符串的一定要加引号,字符串如果为数字mysql会自动转为字符串,但是不使用索引。
- mysql一: 索引优化
- MYSQL优化--索引(一)
- MySQL 索引优化查询(一)
- mysql 优化之索引篇(一)
- mysql索引优化篇(一)
- MySQL优化06 索引(一)
- MySQL查询优化一例---自动利用索引进行优化
- MySQL慢查询优化之索引优化(一)
- Mysql性能优化之索引及优化(一)
- MySql优化--索引优化
- mysql优化(一)判断什么时候加索引
- (一) MySQL 性能优化 基础之索引概念
- MySql索引优化注意
- MySql索引优化注意
- Mysql索引的优化
- MySQL索引优化
- MySQL索引优化
- MySQL查询优化---索引
- Median of Two Sorted Arrays
- 回收站功能在 Linux 中的实现
- 工厂方法--创建型模式(Factory method)
- <body style="overflow-y:hidden;">
- 城市定位,利用百度地图API定位到你当前的位置
- mysql一: 索引优化
- Oracle中merge into的使用
- BZOJ3884 上帝与集合的正确用法(欧拉函数)
- python2.7.8在windows下安装numpy,scipy,matplotlib
- php学习之基础五 错误处理
- MTK工厂模式移植
- NYOJ 27 水池数目
- 第一节---nginx安装
- Mongodb安装配置