Я пытаюсь найти первую запись в нашей огромной базе данных, где «Foo» первый начал появляться, но этот запрос слишком медленно:Как проверить каждую N-ю запись в базе данных mysql?
select min(id)
from mytable
where data like '%foo%';
Я был бы счастлив, чтобы рассчитывать на миллионы, чтобы получить достаточно близко , но этот запрос, кажется, не работать быстрее:
select min(id)
from mytable
where mod(id, 1000000) = 0
and data like '%foo%';
Любая идея, как получить MySQL только проверить каждую миллионную запись? Единственным, что я могу думать о том, чтобы иметь временную таблицу с первыми числами и присоединение на то, умножая каждое целое число от 1000000.
_ «Любая идея, как заставить mysql проверять каждую миллионную запись?» _ - этот вопрос подразумевает, что вы делаете что-то неправильно даже до этого момента. Вы должны (при нормальных обстоятельствах) никогда не нуждаться в таком подходе, когда вы указываете базе данных _where_ (или как) она должна искать себя. Скорее всего, эту проблему можно исправить, используя правильные индексы. (Хотя поиск подстановочных знаков с 'like '% foo%'', конечно, проблематичен по самой своей природе, и индекс в этом столбце, скорее всего, не исправит этого. Но и попытки попытаться вмешаться в то, как выполняется поиск самостоятельно.) – CBroe
Данные слишком велики для индексации, особенно для моего одного запроса. –
можно было бы вычислить id каждой n-й строки и получить эту строку, а затем проверить данные в ней? Он будет очень быстрым, так как он будет искать индекс. –