В моей базе данных содержится около 2 миллионов строк. Это содержит набор предложений в каждой строке (не английский язык).Каков эффективный способ извлечения (выбора) данных из базы данных?
![Image of database][1]
В качестве примера, если пользователь дает 'ABCD', который соответствовал с обеими строками 1,3. Поэтому оба должны выбрать. Из-за этого огромное время, затраченное на получение данных. Я использую следующий код для извлечения данных. Если какое-либо данное слово соответствует базе данных, эти строки должны быть выбраны.
sb.append("SELECT Sentence FROM corpus Where ");
for(int k=0;k<wordList.size();k++){
sb.append(" Sentence like '%" + wordList.get(k) + "%' OR ");
}
sb.append(" 1=0");
rs2 = dbc.sqlExecute(sb.toString());
Это слово выбора может быть в любом месте в строке. Это может быть спереди или в середине или в конце. Моя проблема заключается в том, когда пользователь дает некоторую словосочетание, огромное время для выбора совпадающих строк. Есть ли правильный способ ускорить получение моей базы данных? Я думаю, что индексирование может не работать из-за того, что я не ищу только начальную точку строк. Эти совпадающие слова могут содержаться где угодно в строках. Каков эффективный способ сделать это? Огромное время, затраченное на восстановление. Огромная проблема для меня. Кто-нибудь знает правильный способ сделать это?
См. Индексы FULLTEXT, но обратите внимание, что совпадения совпадений> 50% набора данных не будут возвращены – Strawberry
@Strawberry - это работа на других языках, а не на английском языке? У вас есть правильное руководство об этом? – Maduri
FULLTEXT поддерживает большинство многобайтовых наборов символов. Исключением является то, что для Unicode может использоваться набор символов utf8, но не набор символов ucs2. См. Руководство. – Strawberry