2016-12-09 2 views
0

Я новый в базе данных 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') 

ответ

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 синтаксис вместо устаревших «запятых».

+0

Ницца. Я не знал о 'sleep()'. – GolezTrol

1

Одно из возможных решений, и, вероятно, самый простой, будет использовать index hint игнорировать индексы у вас есть, как это:

select * 
from 
    students s1 
ignore index ind1 

В качестве альтернативы, вы можете попробовать slown вниз запрос (больше) по делая его более сложным. Нижеприведенный запрос немного изменен, особенно часть, которая проверяет имя. Вместо совпадения по имени он совпадает с двумя частями имени. Из второго условия, любой индекс 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') 

Так же, как с добавлением индексов, с силой, не использующие индексы будут также иметь различные результаты. Результаты запроса могут быть кэшированы, и даже без индексов запрос может быть довольно быстрым.

Смежные вопросы