parker

凡上帝目光所及,皆可交易

View the Project on GitHub Spring-packer/parker

21 May 2019

第一篇文章

by

目录


第一部分

这里是第一部分的内容 高并发多线程,内存溢出内存泄漏,redis为什么快,mongo是怎么存储数据, 红黑树,索引的数据结构,为什么用了索引能加快速度,b+树是怎么找到对应索引的, jvm的内存分配


第二部分

这里是第二部分的内容
大数据开发
1
2
3
4
5
6
7
8
9
0
11
12
13
14
15
16
17
18
19
20

22 ———————————-

第三部分

这里是第三部分的内容

mysql 索引相关知识

mysql 表类型有两种:

myISAM 类型

不支持事务,主要是要求性能,所以查询要比innoDB快。 保存了表中具体的行数count(*) 不能包含where条件。

innoDB 类型

支持事务,对外部键支持等高级数据库功能

-

mysql优化之 导致查询不走索引的原因总结

  1. 多关键字查询 ORDER BY 和 limit 连用 : 如果where 字段,order by字段都是索引,那么有limit索引会使用order by字段所在的索引。没有limit会使用where 条件的索引遇到此类状况可以考虑用子查询将order by 和 limit 分开。这种情况主要发生在你用了多个索引,那么你需要注意了。它可能不执行你希望的走索引。(我觉得mysql会自动计算索引)
  2. DATE_FORMAT()格式化时间, 格式化之后 >= <= 比较大小 会导致放弃索引
  3. 子查询中order by的索引会失效,同时可能导致子查询中的where条件索引都不能用。
  4. 字符集的使用 可能会导致不走索引,有时候同一个sql的查询条件不同,where id =1 与 where id = 80 类似这种的 查询时间相差甚远。
  5. like句
    • col like % keyword % 一般不走索引
    • col like keyword% 一般使用索引
    • col like %keyword 一般不使用索引
      一般可以是代替为使用函数比如locate 位置函数,返回子字符串的位置,0 为不存在。 select column from table where locate(‘keyword’, ‘field’) > 0 即可 ,使用索引。
  6. 在where查询语句中使用表达式
  7. 在where查询语句中对字段进行NULL值判断
  8. 在where查询中使用了or关键字, myisam表能用到索引, innodb不行;(用UNION替换OR,可以使用索引)
  9. 全表扫描快于索引扫描(数据量小时)
当查询的数据量是总表数据的1/10 以上时 有可能会放弃索引的使用
一种强制使用索引的方案 ,使用关键字force index

select * from table force index time where time >= 20190527

tags: