如何减慢我的查询速度

时间:2016-12-09 07:16:45

标签: mysql sql database

我是数据库sql的新手。我知道索引使查询更快。但我想学习在不丢弃或创建对象的情况下减慢查询速度的方法。

    create index ind1 on students_2(surname);
        select * from students s1, students_2 s2
    where s1.name1=substr(s2.surname,1,5) and s1.dep=s2.dep and 
    s1.dep in ('Econ','Law')

2 个答案:

答案 0 :(得分:3)

你可以在任何表达中嵌入睡眠。

select * 
from students s1 
join students_2 s2 
  on s1.name1=substr(s2.surname,1,5) and s1.dep=s2.dep
where s1.dep in ('Econ','Law')
  and sleep(0.1)=0;

每次检查一行时,这将增加0.1秒的睡眠时间。 sleep() function通常返回0。

P.S。:请使用正确的JOIN语法而不是过时的“逗号”连接。

答案 1 :(得分:1)

一个解决方案,可能是最简单的解决方案,就是使用index hint来忽略您拥有的索引,如下所示:

select * 
from 
  students s1
ignore index ind1

或者,您可以尝试通过使查询更复杂来减慢查询速度(更多)。 下面的查询稍微修改一下,特别是检查名称的部分。它不是仅按名称匹配,而是匹配名称的两个部分。由于第二个条件,s1.name1上的任何索引都无法有效使用,MySQL必须进行大量的字符串操作:

select * 
from 
  students s1, students_2 s2
where 
  substr(s1.name1, 1, 1) = substr(s2.surname, 1, 1) and 
  substr(s1.name1, 2) = substr(s2.surname, 2, 5) and 
  s1.dep = s2.dep and 
  s1.dep in ('Econ','Law')

就像添加索引一样,强制不使用索引也会产生不同的结果。查询结果可能仍然被缓存,即使没有索引,查询也可以非常快。