РЕально быстрая выборка Select из базы данных, как?

Статус
В этой теме нельзя размещать новые ответы.
Для того чтобы повысить скорость работы поиска тебе придется немного модернизировать таблицу БД.

1. Нужно вынести авторов в отдельную таблицу, а в основную таблицу записывать ссылку на ID автора.
2. Циклом подготовить запросы в БД на основе файла list.txt - возможно это позволит уменьшить количество запросов на поиск автора т.к. кол-во авторов явно должно быть меньше чем кол-во книг.
3. Найти всех авторов (которые на этот момент должны быть в отдельной таблице), затем на основе найденного в основной таблице по ID авторов найти книги, здесь можно попробовать решить через subquery, но скорости это не добавит.

Основная мысль в том, чтобы сократить количество полнотекстового поиска и сделать основное усилие на выборку по ID.
 
С IN тоже не вариант, очень долго запрос, быстрее отправляет 500 запросов чем 1 с длинным IN

Ребят, а как увеличить максимальное количество потоков denwer?
А то запускаю 20 потоков, одновременно в phpmyadmin статистике вижу максимум 8
причем 1 это слип, а второй это Для просмотра ссылки Войди или Зарегистрируйся PROCESSLIST

Нашел такую вот прописку для my.ini
# The MySQL server
[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
max_join_size = 1000000
key_buffer_size = 2048M
thread_stack = 512K
thread_cache_size = 32
tmp_table_size = 512M
max_heap_table_size = 256M
sort_buffer_size = 4M
myisam_sort_buffer_size = 256M
read_buffer_size = 4M
read_rnd_buffer_size = 8M
join_buffer_size = 8M
key_buffer = 2048M
max_connections = 300
max_connect_errors = 50
max_user_connections = 300
table_cache = 128
thread_concurrency = 16
net_buffer_length = 1024
max_allowed_packet = 512M
max_sort_length = 512
query_cache_limit = 2M
query_cache_size = 16M
query_cache_type = 2

Но чтото все равно количество соединений максимально равно 8
 
Последнее редактирование:
А не пробовал использовать вместо mySQL - SQLite. Он на выборку гораздо быстрее работает + в нем работает IN с индексами.
 
У меня вот такой вопрос, а тип таблиц у вас вообще какой, MyISAM или InnoDB ?
Ну и немного дополню сообщение выше, расширение mysql для php уже давно устарело надо использовать mysqli.
И на последок, проверить используются индексы или нет можно с помощью команды explain

Mysql - работает со всеми типами индексов, насколько она качественно и правильно это делает зависит от многих факторов.
 
У меня вот такой вопрос, а тип таблиц у вас вообще какой, MyISAM или InnoDB ?
Ну и немного дополню сообщение выше, расширение mysql для php уже давно устарело надо использовать mysqli.
И на последок, проверить используются индексы или нет можно с помощью команды explain

Mysql - работает со всеми типами индексов, насколько она качественно и правильно это делает зависит от многих факторов.
Пробовал сначала MYisam
Но после того как 3-й раз слетела таблица
выставил InnoDB и перезалил

explain ключи используются

в общем тестирую сейчас
порезал файл на 20 частей
и в фреймах запустил скрипт построчного поиска 20 раз, используя GET для задания имени файла.

В статистике имею сейчас 70 запросов в секунду
Вопросов начиная с запуска: 305,444 Для просмотра ссылки Войди или Зарегистрируйся
ø в час: 252,086
ø в минуту: 4,201
ø в секунду: 70


Соединения ø в час %
Максимально одновременных 11 --- ---
Неудачных попыток 0 0 0%
Прерваны 0 0 0%
Всего 632 510.82 100.00%

Как я понял 20 скриптов моих одновременно не запускаются, а запускаются только 6 штук(((
к примеру 3 миллиона строк будут проверятся где то 15 часов!(((
 
Вам однозначно нужно переходить на ассоциативный массив. Скорость доступа по ключам там просто сумасшедшая.
 
Вам однозначно нужно переходить на ассоциативный массив. Скорость доступа по ключам там просто сумасшедшая.
А можно подгружать предварительно форматированный txt как уже готовый массив?

А то чтото туплю как файл в массив а затем с ним работать уже как с целыми массивом а не с одиночными значениями
ну к примеру в тексте
array(
"a"=>"b",
"c"=>"d",
);

И подгружать его уже как массив $array;
 
Самый простой способ хранить массив в файле это serialize, а распаковывать unserialize. Хотя практичнее делать простой include с уже готовым массивом. Получить его можно через var_export( $array,true)
 
Самый простой способ хранить массив в файле это serialize, а распаковывать unserialize. Хотя практичнее делать простой include с уже готовым массивом. Получить его можно через var_export( $array,true)
простой include с уже готовым массивом
чтото вроде include('list.txt'); ?
а в каком виде хранить инфу в этом txt?
array(
"a"=>"b",
"c"=>"d",
);



Можно немного поподробней про это?
Не будет ли жестко подгружать 8гб тхт файл в массив и юзать по нему поиск из 200мб тхт?


Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217728 bytes) in

Эт я только 180мб файл подключил***((((
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху