Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Работа с более чем 200.000 записями

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
vlados
Отправлено: 19 Декабря, 2012 - 13:06:32
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Есть таблица, в которой свыше 200.000 записей.

CODE (SQL):
скопировать код в буфер обмена
  1. структура таблицы
  2. id(int) title(text) page(text) content(text)
  3.  

Мой скрипт примерно такой (извините за то что не привел нормальный вид скрипта, давно не писал mysql+php, больше пишу на python,perl)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. if(!empty($_GET['id'])){
  4.  
  5. $res = cursor.execute('SELECT * FROM `table` WHERE `id` = %(id)s', {'id':(int)$_GET['id']});
  6.  
  7. foreach($res as $r){
  8.  
  9. echo '<h1>'+$r[0]+'</h1>';
  10. echo '<a href="+$r[1]+">'+$r[0]+'</a>';
  11. echo '<p>'+$r[2]+'</p>';
  12.  
  13. } else {echo 'index page';}
  14.  
  15. }
  16.  
  17. ?>



Но объем таблицы очень огромен. Что с этим делать?

(Отредактировано автором: 19 Декабря, 2012 - 13:12:35)

 
 Top
SAD
Отправлено: 19 Декабря, 2012 - 13:43:01
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




в чем собственно беда?
 
 Top
vlados
Отправлено: 19 Декабря, 2012 - 13:48:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Боюсь все тупить будет.
 
 Top
Мелкий Супермодератор
Отправлено: 19 Декабря, 2012 - 14:04:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




vlados пишет:
Но объем таблицы очень огромен.

200тыс. записей?
На селекте по PK? Не смешите меня, пожалуйста. Это игрушечное значение.


-----
PostgreSQL DBA
 
 Top
vlados
Отправлено: 19 Декабря, 2012 - 14:13:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Ок, протестирую отпишусь..
 
 Top
vlados
Отправлено: 21 Декабря, 2012 - 11:36:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Ну вот.

Код SQL

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT SQL_CALC_FOUND_ROWS id,keyword FROM DATA LIMIT 0,10


Выполняется 2.9183 сек

Таблица



Если прикинуть, что полная таблица будет весить где то 2Гб.... Что же делать????? А?! А?! А?!

(Отредактировано автором: 21 Декабря, 2012 - 11:41:18)

 
 Top
Мелкий Супермодератор
Отправлено: 21 Декабря, 2012 - 11:47:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




vlados пишет:
SELECT SQL_CALC_FOUND_ROWS

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


-----
PostgreSQL DBA
 
 Top
vlados
Отправлено: 21 Декабря, 2012 - 11:55:18
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Да, верно. Такой вариант я отбросил и взял вот этот

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT SQL_NO_CACHE id,keyword FROM DATA WHERE id>10 ORDER BY id LIMIT 20;


Теперь мне нужно как можно быстрее узнать сколько всего записей в таблице! Как это можно сделать??

(Отредактировано автором: 21 Декабря, 2012 - 11:55:38)

 
 Top
NoPaper
Отправлено: 21 Декабря, 2012 - 11:59:14
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




vlados

(Отредактировано автором: 21 Декабря, 2012 - 11:59:49)

 
 Top
vlados
Отправлено: 21 Декабря, 2012 - 12:02:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Ну а вот вам и вариантик Улыбка

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id FROM DATA ORDER BY id DESC LIMIT 1;

(Добавление)
NoPaper, ваш вариант будет выполняться секунд 5.
 
 Top
Саныч Модератор
Отправлено: 21 Декабря, 2012 - 12:10:28
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




vlados, а вы не думали, что записи могут удалятся и ID последней уже не будет соответствовать количеству?


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
vlados
Отправлено: 21 Декабря, 2012 - 12:12:47
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Нет. Тогда как сделать?
 
 Top
eai
Отправлено: 21 Декабря, 2012 - 12:19:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




vlados пишет:
Нет. Тогда как сделать?


Совсем не понятно если честно в чем ваша проблема.

Колбасить 200к записей, да это не верно, если это реально необходимо то покупай StoreWise + X5 от одной очень большой и голубой конторы.

Но судя по всему ваша задача сего не потребует.
 
 Top
vlados
Отправлено: 21 Декабря, 2012 - 12:26:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Цитата:
Совсем не понятно если честно в чем ваша проблема.

Нужно быстро получить количество записей из таблицы.

Цитата:
Колбасить 200к записей, да это не верно, если это реально необходимо то покупай StoreWise + X5 от одной очень большой и голубой конторы.

Колбасить ничего не нужно. Мне нужно лишь чиcло (INT) записй в таблице, не более. Да и к тому же, у меня есть сервер, вполне неплохой.

(Отредактировано автором: 21 Декабря, 2012 - 12:27:17)

 
 Top
eai
Отправлено: 21 Декабря, 2012 - 12:33:58
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




SELECT COUNT(*) FROM HUGETABLE
Как долго работает
Есть ли в таблице первичный ключ?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB