Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122

Долгий запрос в базу

10.07.2012, 18:49. Показов 1772. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
к примеру мне нужно вытянуть 1 запись рандомно из таблицы ( 255000 записей - 11мб вес ) , делаю вот такой запрос

PHP
1
2
3
$r=mysql_query("SELECT w FROM my_table WHERE a='' ORDER BY RAND() LIMIT 1");
if($row=mysql_fetch_array($r)) $w=$row['w'];
     else $w="[ERROR]";
запрос выполняется более 5 сек и это всеголиш 1 запрос, что я нетак делаю что оно так долго работает?



--------
таблица имеет конструкцию

SQL
1
2
3
id  INT(11)           Нет            AUTO_INCREMENT
w   VARCHAR(50)   utf8_general_ci
a   VARCHAR(50)   utf8_general_ci
Добавлено через 7 минут
да и рандомно указывая ид неполучится так как всегда присутствует дополнительное условие в поле (а) ...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.07.2012, 18:49
Ответы с готовыми решениями:

Долгий-долгий запрос...
Ребята! :gsmile:Нужна ваша помощь! Ситуация следующая. Вызываю хранимую процедуру. Процедура очень большая и на MSSQL успешно...

Не проходит запрос в базу
в общем это регистрация онлайн игры суть такая, нет реакции на кнопку, в логах пусто запрос в бд не проходит голову ломаю 3 дня, не...

Запрос в базу данных
Всем привет. Существует запрос в базу if ($_GET != ""){ $mass = "1,2,3,4,5,6"; }else{ $mass = ЧТО СЮДА ПОДСТАВИТЬ СТОБЫ...

9
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.07.2012, 19:38
уже давно везде (и в гугле, и здесь на форуме) кричат об использовании ORDER BY RAND()
используйте пыховскую рандомизацию и подставляйте

Добавлено через 1 минуту
настройка и ошибки скрипта
Нужны два запроса в пхп

Добавлено через 1 минуту
Цитата Сообщение от Nebiros Посмотреть сообщение
да и рандомно указывая ид неполучится
делайте лимит рандомно тогда
PHP
1
2
$rand=rand(0,255000);
"SELECT ..... LIMIT $rand,1";
Добавлено через 7 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
set_time_limit(0);
ob_start();
$timer = microtime(true);
for ($i = 1 ;$i < 3000; $i++)
{ 
//$rand=rand(0,255000);
mysql_query("SELECT * FROM `test` ORDER BY RAND() LIMIT 1");
 
}
ob_clean();
echo microtime(true) - $timer;
результат:
3.7403130531311

PHP
1
2
3
4
5
6
7
8
9
10
11
set_time_limit(0);
ob_start();
$timer = microtime(true);
for ($i = 1 ;$i < 3000; $i++)
{ 
$rand=rand(0,255000);
mysql_query("SELECT * FROM `test` LIMIT $rand,1");
 
}
ob_clean();
echo microtime(true) - $timer;
результат:
1.9956929683685
Заметно разницу?
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
10.07.2012, 20:16  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
делайте лимит рандомно тогда
к примеру записи в базе выглядят вот так

HTML5
1
2
3
4
5
6
7
8
9
10
11
1  |  a   |    w
---------------------
1  |  a1  |  test1
2  |  a2  |  test2
3  |  a3  |  test3
4  |  a1  |  test4
5  |  a2  |  test5
6  |  a1  |  test6
7  |  a4  |  test7
......................
......................
и нам надо выбрать рандомно запись но при этом чтобы а='a1', а запси с а1 могут быть и в конце таблицы и в начале, может быть таких записей 10 а может и 1000, как вы примените свой метод здесь?
0
217 / 157 / 30
Регистрация: 11.05.2010
Сообщений: 614
10.07.2012, 21:43
как-то так:
PHP
1
$rand = rand(1, mysql_query("SELECT count() FROM `test`"));
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.07.2012, 21:51
вы сами так писали. определитесь сначала что вам надо, а потом спрашивайте
Цитата Сообщение от Nebiros Посмотреть сообщение
к примеру мне нужно вытянуть 1 запись
Цитата Сообщение от Nebiros Посмотреть сообщение
WHERE a='' ORDER BY RAND() LIMIT 1");
Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от kester Посмотреть сообщение
как-то так:
count(id) тогда хотя бы..



Добавлено через 5 минут
и кстати тоже самое получится что и в моем варианте)
1
217 / 157 / 30
Регистрация: 11.05.2010
Сообщений: 614
10.07.2012, 21:55
идём в гугол, пишем "ORDER BY RAND()", с первых же ссылок:
Замена ORDER BY RAND() в MySQL, Производительность ORDER BY RAND() LIMIT, ну и тд.
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
10.07.2012, 22:09  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
вы сами так писали. определитесь сначала что вам надо, а потом спрашивайте
ну да мне над 1 запись вытянуть но иногда а="" а иногда и а="чет там" , тоесть мне нужно вытягивать 1 рандом запись но при этом с дополнительными условиями к ячейке (а)
Цитата Сообщение от kester Посмотреть сообщение
как-то так:
аналогично выше писал что просто рандом ид или ранд любая запись не проходит...

тоесть к примеру из таблицы надо тостать рандом 1 из записей в которой поле (а) чемуто ровняется или пуста...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.07.2012, 22:12
хм. не могу представить как это можно осуществить. единственное, что приходит в голову - извлечь все где a='что то там' и затем рандомно выбрать одну из извлеченных записей.
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
10.07.2012, 23:07  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
хм. не могу представить как это можно осуществить. единственное, что приходит в голову - извлечь все где a='что то там' и затем рандомно выбрать одну из извлеченных записей.
или меня посещяет мысль извлечь все разные а и раскинуть по таблицам, таблиц канеш получится больше 50ти но я пока только такое решение вижу, думал что можно этого избежать

Добавлено через 1 минуту
Цитата Сообщение от KOPOJI Посмотреть сообщение
извлечь все где a='что то там'
таких записей может быть и 10000 и 50000 тоже не вариант...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.07.2012, 23:17
я не знаю что тут можно еще придумать ORDER BY RAND точно повесит сервак на таком количестве)))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.07.2012, 23:17
Помогаю со студенческими работами здесь

Запрос в базу данных
Всем доброго дня! Помогите пожалуйста найти ошибку в запросе на изменение данных, уже мозги кипят, буду очень благодарен. &lt;?php ...

Запрос в базу по дате
Вот запрос $query = &quot;SELECT * FROM &quot;.TableLunchMenu.&quot;&quot; . &quot;WHERE date=&quot;.date(&quot;Y-m-d&quot;); Получаю: WTF? You...

Не работает запрос в базу
Кто сможет подсказать почему это не работает? $result1 = (&quot;SELECT * FROM user_num WHERE ip='$ip' and date='NOW()'&quot;); $res1 =...

Запрос в базу и вывод
Есть данный код: &lt;?php $id = isset($_GET) ? (int) $_GET : 0; if ($id &gt; 0) { include...

Запрос в базу: ошибка
Здравствуйте! У меня есть текстовый файл, с него мы достаем данные (спарсив его) но когда выполняется запрос в базу, показывает ошибку:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru