1、每次运行都使用SQL_NO_CACHE ? 第1次:SELECT SQL_NO_CACHE 第2次:SELECT SQL_NO_CACHE 2、NO有几种值? 3、4:ID、NO、`add_time`上建立复合索引没有 5、 SELECT NO,add_time FROM mytype GROUP BY NO,add_time ORDER BY NO DESC 6、一般是建立复合索引,反复调试,比较烦索优化不是一、两话讲得清楚的,建议看看高性能MySQL(第3版)
1.我不明白你要为什么要禁止止查询缓存! 2.在使用>时,不使用索引,那是不是查出来的结果和表的总数据差不多,如果是,那就是mysql认为此时按索引会更慢,故放弃了使用索引,当然你可以让它强制使用索引 FORCE INDE(索引名)! 3.or是不好优化的,而且还是不同的字段,建议你尝试建一个联合索引看看! 4.union会把所有的表连接起来查询,怎么会比or快呢!个人觉得union会比all慢! 5.order by 应该需要与where一起用,我现在也在纠结这个问题! 6.来自不同的表,最好不要这样做,这样肯定不会用索引!如果一个字段asc另一个desc,这样mysql是不会使用索引的,哪怕你强制使用索引也没用!
第1次:SELECT SQL_NO_CACHE
第2次:SELECT SQL_NO_CACHE
2、NO有几种值?
3、4:ID、NO、`add_time`上建立复合索引没有
5、
SELECT NO,add_time FROM mytype
GROUP BY
NO,add_time
ORDER BY NO DESC
6、一般是建立复合索引,反复调试,比较烦索优化不是一、两话讲得清楚的,建议看看高性能MySQL(第3版)
2、no是int类型,我自增加了数据,应该有 1到70万
3、4、建立了组合索引。
现在正在努力的学习MySQL的优化,就是在建立索引方面有点糊涂,不知道在什么情况下会选择哪个索引,而对于一些复杂的where查询,总觉得一条索引无法解决
如果用了sql_no_cache,那肯定不会去QUERY CACHE里去数据了。
如果是MYSQL重启了,可以理解为第一次从磁盘读数据,后面的是从内存读数据,这个区别很大。
show profiles 看一下每次执行的动作。问题二:为什么设置了索引,但使用>的时候却没有使用索引了?
假设表1中A列为1-10的数字并有索引在A列, 当做查询where a>=1 此时还有谁认为应该使用索引?问题太多了,看得眼花,并且如果真的打算详细了解优化方面的东西,则建议先看一下 《数据库系统概论(第四版)》 王珊 萨师煊 高等教育出版社 中的查询优化,专门讲了一章。然后再看MYSQL官方手册中的“优化”那个章节。
2.在使用>时,不使用索引,那是不是查出来的结果和表的总数据差不多,如果是,那就是mysql认为此时按索引会更慢,故放弃了使用索引,当然你可以让它强制使用索引 FORCE INDE(索引名)!
3.or是不好优化的,而且还是不同的字段,建议你尝试建一个联合索引看看!
4.union会把所有的表连接起来查询,怎么会比or快呢!个人觉得union会比all慢!
5.order by 应该需要与where一起用,我现在也在纠结这个问题!
6.来自不同的表,最好不要这样做,这样肯定不会用索引!如果一个字段asc另一个desc,这样mysql是不会使用索引的,哪怕你强制使用索引也没用!
1.禁止查询缓存是想测试某条SQL语句第一次执行的速度。
因为遇到的项目有个问题就是:第一次查询很慢,但之后都快,想要优化第一次查询的速度。
自己设了几条SQL语句,结果都只可以实验一次,而且还不能确定前一条语句是否对测试中的语句产生影响,这样很不方便4这个主要是从网上看到的,说使用union代替or会快,因为union能用到索引,而or不能。我跑去测试到的结果却相反了,所以想知道为什么- -!
后来测试发现:or也不是绝对不用索引的,只要谨慎点[每个or条件都具有索引,而且满足索引使用情况],也可以用到联合索引6.确实不好,但如果需要使用到的时候也没办法。
我测试过,如果不同的表的字段放一起,那个group by和order by都不会用上索引,但如果where和left join上有索引,且符合条件的时候,mySQL会使用索引获取数据,然后再分组,最后排序。
现在用到这种排序的时候,只能通过减少数据量来加快访问的速度,但治标不治本,苦恼
or的话,可能后面跟的条值少一些有到吧,我感觉in就是这样,如果值太多,就放弃使用了索引!
排序使用文件排序是最慢的,而且IO次数又多!要想提高查询速度,这必须要避免的啊!既然没办法,也快不了那里去啊!