Мне нужно разрешить пользователям просматривать таблицу s > 1 миллионом записей первой буквой в заголовке.
Я хочу, чтобы они могли просматривать каждую букву из A-Z, 0-9 в списке вместе и все остальные символы вместе.
Поскольку это большая база данных и она должна отображаться на веб-сайте, мне нужно, чтобы она была эффективной. Regex не использует индекс, поэтому он будет слишком медленным.
Возможно ли это, или мне придется переосмыслить дизайн?
Заранее спасибо
Создавайте ссылки, представляющие каждую букву и номер. Нажатие этих ссылок предоставит пользователям результаты из базы данных, которые начинаются с выбранного символа.
SELECT title FROM table
WHERE LEFT(title,1) = ?Char
ORDER BY title ASC;
Рассмотрите возможность разбивки этих страниц результатов на соответствующие фрагменты. MySQL позволит вам сделать это с помощью LIMIT
Эта команда выберет первые 100 записей из нужной группы символов:
SELECT title FROM table
WHERE LEFT(title,1) = ?Char
ORDER BY title ASC
LIMIT 0, 100;
Эта команда будет выбирать следующие 100 записей из требуемой группы символов:
SELECT title FROM table
WHERE LEFT(title,1) = ?Char
ORDER BY title ASC
LIMIT 100, 100;
В ваших комментариях, если вы хотите комбинировать символы 0-9 без использования регулярных выражений, вам нужно будет объединить несколько операторов OR
:
SELECT title FROM table
WHERE (
LEFT(title,1) = '0'
OR LEFT(title,1) = '1'
...
)
ORDER BY title ASC;
Пока существует индекс в "Title", вы должны иметь возможность использовать SQL как
select *
from myTable
where Title like 'A%'
(или "B%", "C%"...)
OR
. В противном случае вы можете рассмотреть возможность использованияREGEXP
если ваши пользователи не будут часто просматривать результаты, начиная с таких символов. Вам придется проверить запросы на скорость.