Używam mysql bazy danych, która ma tylko jedną tabelę „dane” z 17,151257 rows.This tabela ma kolumnę ciąg. Chcę wydrukować wszystkie wiersze, w których kolumna ciąg zawiera określony ciąg znaków zapytania (przechowywanego w „entered_query” zmiennej), więc stosowane następujące:mysql optymalizacja kwerenda wybierająca i jak działa ograniczenie w mysql
SELECT DISTINCT * from data WHERE string LIKE '%".$entered_query."%' limit 10
Jako oczywiste powyżej zapytania zajmuje zbyt wiele czasu, aby wykonać .
Czytałem, że indeksowanie może być używane, ale jak w tym przypadku?
Myślałem również o dzieleniu całych danych na 10 różnych wierszy, a następnie wykonywaniu 10 równoległych zapytań przy użyciuperl DBI.
Teraz mam następujące pytania:
- Jak zmniejszyć czas realizacji?
- Słyszałem, że "LIKE" w zapytaniu mysql unika indeksowania, więc czy jest jakaś lepsza alternatywa dla powyższego zapytania?
- Gdy używamy limitu 10 w zapytaniu mysql następnie robi mysql zatrzymuje wykonywanie tak szybko, jak to stwierdza pierwszych 10 wyników lub najpierw przeszukuje cały dane dla danego zapytania wówczas zwraca pierwszych 10 wyników
Mam nadzieję, że '$ requested_query' nie zawiera tego, co sugeruje jego nazwa. W przeciwnym razie może to być sposób na przyspieszenie zapytań, których nie chcesz. – innaM
Co to jest "DISTINCT *" i czy istnieje dolny limit rozmiaru wprowadzonego ciągu? – innaM
@innaM DISTINCT * służy do wyboru tylko unikatowej krotki. $ wprowadzona_wartość zawiera zapytanie, które użytkownicy wprowadzili do wyszukiwania w kolumnie "ciąg" od tabeli "dane". * Przepraszamy za wybranie mylącego przykładu. –