刚才缓存没有显示是因为下面的值没有设置的原因
类似缓存的总大小,0就是没有空间,就等于存不住
修改值
重启服务
命中率由于没有使用都是0
3是没有被缓存的查询
缓存里确实+1内容了
命中了
查询次数越多,命中率就上去了
写大写的select的语句,命中率不长,但是缓存的语句涨了
说明大小写很重要,认为是另外的命令
简单索引,在一个字段上建立索引
组合索引,在多个字段上建立索引
A就当做学生编号,因为是符合索引,数据就一一对应
在什么情况下适合用这种索引
)
**myisam是myd放数据,myi放索引,索引跟数据是分离的,因为myisam不支持聚集索引,
innodb可以把索引和数据放一起,就是聚集索引 **
一旦建立主键,索引,就会对数据重新进行整理
叫主键索引
这样学员编号,就会按照标准的从小到大排序的
最上面是数干,下面是叶子节点
如果是3好学生,就会在后面存储整条记录。说白了,通过索引,数就在旁边放着,所以主键索引,查找数据的话,速度特别快
但是如果是拿姓名作为搜索条件
那就只能从左到右一个个搜索,等于按照磁盘排列顺序,全表扫描,所以效率是比较低的,那就有可能再创建一个索引
进行两次扫描,
第一次按照索引,第二次按照主键去扫描
精确查询,就有 可能要针对每个列的添加索引
但是建立多个索引,就很占磁盘空间,但是牺牲这点代价还是值得的
最左匹配的索引
fname姓,lname名字,复合索引
这样最左查找,写where语句的时候只能先用fname,不能lname,不然依然是全表扫描
因为叶子指针可以找到相邻的
比如要查姓名为A,
但是有些东西不可以
不能跳过中间的列,因为age是依赖于lname
而且cc名字中对应的年龄是按照从小到大的顺序排列的,dd中的姓名对应的年龄也是从小到大
ABCD四个字段,A做一个索引,AB做另外一个索引
AB都指向主键,A也指向主键,重复了,纯粹多余
这样的是索引无法利用的,把索引参与到运算里
这样放在独立列就可以 了,
多列索引就是使用and的时候,或的话就无法利用索引了
谁在前谁在后,经常查的应该往左放,查的少往后放
NULL无法指定列
如果拿地址作为索引,那既占地方,又一个字符一个字符对比查询速度慢,(可以设置查询前几个)
对于多个列经常and,或者orderby排序,就可以建立复合索引
%a这么写的话,会前面扫描一遍
小米%会找索引
对于索引列加上运算就不能进行索引
即使你大表驱动小表,mysql数据库也会自动优化成小表驱动大表
A表10条记录,就会循环10次去匹配记录
子查询一般效率比较低下
可以考虑在其他没有索引的列建立索引
专门查看索引的工具
explain是可以解析代码执行过程的
rows,25行,为了查 这个结果查了25行,而这个表就25行
在age上建立索引
就找了两次,原来要找25行
前面利用索引,后面是都需要索引
possible_keys可能利用索引了
key确实利用的索引
可以统计哪些索引利用来了,哪些没利用,就需要把开关打开,默认是不跟踪的
全局设置
这个索引使用次数
排序不会利用索引
主键索引也用起来了
这样就可以考虑使用率高的保留下来,低的就删除
如果在表的中间删除了一些数据,那 么就会造成索引的磁盘碎片,
就可以执行上面的命令,重新整理索引,让其按照紧凑的方式保存,节约空间
id
select type 查询类型
table 表
type
possible key 可能用的键
key用到的键
key_len键长度
ref参考
row行
extra额外信息