Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оптимизация Таблицы
 
 автор: fivemusic   (26.12.2007 в 11:01)   письмо автору
 
 

Есть таблица


CREATE TABLE `music_21-11-07-pm1121-19-04-35` (
  `id` int(10) NOT NULL auto_increment,
  `abc` char(2) NOT NULL default '',
  `kompoz` varchar(100) NOT NULL default '',
  `data` varchar(30) NOT NULL default '',
  `link` varchar(255) NOT NULL default '',
  `down` int(10) NOT NULL default '0',
  `active` int(2) NOT NULL default '0',
  `autor` varchar(100) NOT NULL default '',
  `login` varchar(100) NOT NULL default 'Admin',
  `moder` int(2) NOT NULL default '1',
  `xtest` text NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`),
  KEY `id_2` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=58120 ;


В ней 58120 записей, размер таблицы 159.1 МБ.

Вот, поставил сайт сюда : http://akkord.fivemusic.ru/index.php?modul=181
И страницы ЖУТКО ВИСНУТ! Что можно сделать ? Вот например www.amdm.ru - открывается все быстро, или когда лезешь через PHPMYADMIN в таблицу, просматриваешь - тоже относительно быстр.

   
 
 автор: cheops   (26.12.2007 в 12:16)   письмо автору
 
   для: fivemusic   (26.12.2007 в 11:01)
 

А какие SELECT-запросы к ней осуществляете?

   
 
 автор: fivemusic   (26.12.2007 в 13:26)   письмо автору
 
   для: cheops   (26.12.2007 в 12:16)
 

Ну например для вывода последних 100 добавленных текстов :


$sql="SELECT * FROM `$bd` WHERE active='0' ORDER by `down` DESC LIMIT 100";
$result = mysql_query($sql); $i=0;
while($rez=@mysql_fetch_array($result))
{
$us=str_replace("{ID}", $rez[id], _blocks($data, "TR", 2));
$us=str_replace("{LIINK}", "index.php?modul=".$_GET[modul]."&mp3=".$rez[id], $us);
if(($i%2)==0) $postrwd="#E9EBFD"; else $postrwd="#DEE1F7";
$us=str_replace("{COLOR}", $postrwd, $us); if($page=="" OR empty($page) OR $page==1) $nummp=$i+1; else $nummp=($i+(($page-1)*$num))+1;
$us=str_replace("{NP}", $nummp, $us);
$us=str_replace("{ISP}", $rez[autor], $us);
$us=str_replace("{DDOWN}", $rez[down], $us);
$users.=str_replace("{NAZ}", $rez[kompoz], $us); $i++;
}

   
 
 автор: Trianon   (26.12.2007 в 14:57)   письмо автору
 
   для: fivemusic   (26.12.2007 в 13:26)
 

Для поля down индекс создан?

   
 
 автор: fivemusic   (26.12.2007 в 19:19)   письмо автору
 
   для: Trianon   (26.12.2007 в 14:57)
 

Нет, я привел же запрос по которому создается таблица.
А в поле down считается кол-во просмотров

+ на сайте есть поиск, вот код :

if($_GET[mmd]=="autor") $ziza="WHERE active='0' AND (`autor` LIKE '%$kak') ORDER by autor, kompoz";
if($_GET[mmd]=="name") $ziza="WHERE active='0' AND (`kompoz` LIKE '%$kak') ORDER by autor, kompoz";
if($_GET[mmd]=="fraza") $ziza="WHERE active='0' AND (`xtest` LIKE '%$kak') ORDER by autor, kompoz";
$result = mysql_query("SELECT COUNT(*) FROM `$bd` $ziza");  
@$posts = mysql_fetch_row($result);  
$total = intval(($posts[0]-1)/$num) + 1;  
$page = intval($page);  
if(empty($page) or $page < 0) $page = 1;  
  if($page > $total) $page = $total;  
$start = $page * $num - $num;  
$result = mysql_query("SELECT * FROM `$bd` ".$ziza." LIMIT $start, $num");  
while ( $postrow[] = @mysql_fetch_array($result))  
for($i = 0; $i < $num; $i++)  
{  
if((count($postrow)-1)<=$i) break;
$us=str_replace("{ID}", $postrow[$i][id], _blocks($data, "TR", 1));
$postrow[$i][data]=date("d.m.y",$postrow[$i][data]);
$us=str_replace("{LIINK}", "index.php?modul=".$_GET[modul]."&mp3=".$postrow[$i][id], $us);
if(($i%2)==0) $postrwd="#E9EBFD"; else $postrwd="#DEE1F7";
$us=str_replace("{COLOR}", $postrwd, $us); if($page=="" OR empty($page) OR $page==1) $nummp=$i+1; else $nummp=($i+(($page-1)*$num))+1;
$us=str_replace("{NP}", $nummp, $us);
$us=str_replace("{ISP}", $postrow[$i][autor], $us);
$us=str_replace("{DDOWN}", $postrow[$i][down], $us);
$users.=str_replace("{NAZ}", $postrow[$i][kompoz], $us);
}



формирование буковок вот:


function _muuzabc()

global $_GET;
@$dat=mysql_fetch_array(mysql_query("SELECT id,modul,db FROM `razdel` WHERE modul='music.php' OR modul='arrords.php'"));
$kiss=explode("|", $dat[db]);
for($i=0; $i<count($kiss); $i++){if($kiss[$i]!="") $_GET[mydb][$i]=$kiss[$i];}
if(!$dat) $outer="Музыка не найдена!";
else {
$pisatext=mysql_fetch_array(mysql_query("SELECT * FROM `shablon` WHERE id='$dat[id]'"));
$pisatext=$pisatext[text];

$data=$pisatext;
$lino="index.php?modul=".$dat[id];
$nnm=$pisatext;
include_once "function.inc/abc.php";
$outer=echo_abcw($nnm, $kiss[0], $_GET[abc], $lino, "-");
}
return $outer;
}


отображение песен на данную букву вот :


if($key=="0-9") $ziza="WHERE active=0 AND `abc` NOT REGEXP '[a-zA-zЮ-Ъю-ъ]'";
elseif($key=="е") $ziza="WHERE active=0 AND (`abc`='е' OR `abc`='&#9559;')";
elseif($key=="х") $ziza="WHERE active=0 AND (`abc`='х' OR `abc`='и')";
else $ziza="WHERE active=0 AND `abc`='$key'";
$result = mysql_query("SELECT COUNT(*) FROM `$bd` $ziza");  
@$posts = mysql_fetch_row($result);  
if(!$posts[0]) $outer.="БЛА БЛА БЛА";
else
{
$total = intval(($posts[0]-1)/$num) + 1;  
$page = intval($page);  
if(empty($page) or $page < 0) $page = 1;  
  if($page > $total) $page = $total;  
$start = $page * $num - $num;  
$urkil="index.php?modul=".$_GET[modul]."&abc=$key&numb=";
$result = mysql_query("SELECT * FROM `$bd` ".$ziza." ORDER by abc,autor,kompoz LIMIT $start, $num");  
while ( $postrow[] = mysql_fetch_array($result))  
for($i = 0; $i < $num; $i++)  
{  
if((count($postrow)-1)<=$i) break;
$us=str_replace("{ID}", $postrow[$i][id], _blocks($data, "TR", 1));
$users.=str_replace("{NAZ}", $postrow[$i][kompoz], $us);
}
}

   
 
 автор: Trianon   (26.12.2007 в 21:51)   письмо автору
 
   для: fivemusic   (26.12.2007 в 19:19)
 

>>Для поля down индекс создан?
>Нет...
Так создайте.
Какой смысл ожидать от огромной таблицы быстродействия, не обеспечив её индексами на тех полях, по которым ведется выборка?

Что такое active который ноль или не ноль?
Зачем Вам в этой таблице неактивные элементы?
Унесите их в отдельную.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования