Вот SQL, который будет возвращать то, что вы хотите
mysql> CREATE TABLE sample (Start INT, End INT);
mysql> INSERT sample VALUES (9,12),(1,2),(60,88),(10,11),(79,80);
mysql> SELECT *
-> FROM sample s
-> WHERE NOT EXISTS (SELECT 1
-> FROM sample
-> WHERE s.Start > Start AND s.Start < End);
+-------+------+
| Start | End |
+-------+------+
| 9 | 12 |
| 1 | 2 |
| 60 | 88 |
+-------+------+
Конечно, вы можете создать VIEW, переместить данные в другую таблицу или удалить строки, используя вышеуказанный SQL.
ПРИМЕЧАНИЕ: я не совсем уверен, почему вы делаете эту «оптимизацию».
РЕДАКТИРОВАТЬ:
Запрос может быть переписан как
SELECT s.*
FROM sample s LEFT JOIN
sample s2 ON s.Start > s2.Start AND s.Start < s2.End
WHERE s2.start IS NULL;
, что создаст другой план выполнения (2xsimple select против основного / зависимого подзапроса для EXISTS), поэтому производительность может отличаться.Оба запроса будут использовать индекс (Start, End), если он существует.