我是数据库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')
答案 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')
就像添加索引一样,强制不使用索引也会产生不同的结果。查询结果可能仍然被缓存,即使没有索引,查询也可以非常快。