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

Форум MySQL

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

 

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

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

тема: Значимость LIMIT
 
 автор: Shorr Kan   (12.08.2006 в 01:41)   письмо автору
 
 

Просто теоретический вопрос... В табличке - тысяча строк. $word - встречается в столбце word - только один раз. То есть, WHERE word='$word' - вернет только одну строку.
Есть ли разница в нагрузке или скорости, между:
SELECT * FROM tbl WHERE word='$word'
и
SELECT * FROM tbl WHERE word='$word' LIMIT 1
?

   
 
 автор: cheops   (12.08.2006 в 02:54)   письмо автору
 
   для: Shorr Kan   (12.08.2006 в 01:41)
 

Разницы нет.

   
 
 автор: Shorr Kan   (12.08.2006 в 05:43)   письмо автору
 
   для: cheops   (12.08.2006 в 02:54)
 

Спасибо.

   
 
 автор: RV   (12.08.2006 в 07:14)   письмо автору
 
   для: Shorr Kan   (12.08.2006 в 05:43)
 

если тысяча строк то разницы нет потому что тысяча строк это почти пусто.
а вот если больше

<?
for ($i 0$i 100000000000;)
{
    
mysql_query("INSERT INTO test1 (id, word) VALUES (" $i ", " rand(05000000000000000000) . ")") or die (mysql_error());
    
$i++;
}
?>

этот запрос делался нескажу сколько, но в конце я его остановил. последний id в таблице был 5119317.
далее запрос (через phpmyadmin)

SELECT * 
FROM 'test1' 
WHERE word =297259680
LIMIT 0 , 30 
делался 1.4857 сек



а если LIMIT 1 то 0.0100 сек.
или база будет перебирать всю таблицу или база будет перебирать таблицу до первого нужного значения. разница есть.
а если значения в базе вобще отсутствует, то перебор занял 7.8833 сек.
далее

SELECT * FROM 'test1' WHERE id = 1 LIMIT 1
Запрос занял 0.0004 сек



SELECT * 
FROM 'test1' 
WHERE id =1
LIMIT 0 , 30 
Запрос занял 6.8761 сек



SELECT * 
FROM 'test1' 
WHERE id =5119317 // последний id в базе
LIMIT 0 , 30 
Запрос занял 6.8700 сек


SELECT * 
FROM 'test1' 
WHERE id =5119317
LIMIT 1
Запрос занял 6.9733 сек

   
 
 автор: Shorr Kan   (12.08.2006 в 13:24)   письмо автору
 
   для: RV   (12.08.2006 в 07:14)
 

Очень интересно, спасибо. Это именно то, что я искал.

   
 
 автор: ShadowXak   (01.12.2006 в 18:56)   письмо автору
 
   для: Shorr Kan   (12.08.2006 в 13:24)
 

вот как у меня организован запрос:
$banner = mysql_query("SELECT `id`, `title`, `text`, `block_id`, `date`, `image`, `text_sokr`, 
`client_id`, `kol_klzak`, `kol_kl`, `kol_pokzak`, `kol_pok`, `data_full`, `published`, `polojenie`, `url`
 FROM `cms_banner_title` WHERE `published`='Y' AND `polojenie` = '4' 
 ORDER BY rand() LIMIT 10");
$row = mysql_fetch_array($banner, MYSQL_NUM);


вывожу так:
echo '<a href="index.php?option=banner&func=shadowxak&refer='.$row[0].'" target="_blank"><img src="'.$imageurl.'" alt="'.$row[1].'" border="0"/></a></br><p></p>';


где $imageurl - путь до банера! По логике если посмотреть запрос то должно 10 различных баннеров выводиться на странице, а выводиться только 1 который первый поймался. Также необходимо если в бд менее 10 соответствующих условий, то выводиться должны все что есть, но случайность выведения объязательна!

где что я пропустил? выводиться только первая попавшияся запись :(
Плиз помогите...

   
 
 автор: ShadowXak   (02.12.2006 в 12:07)   письмо автору
 
   для: ShadowXak   (01.12.2006 в 18:56)
 

Ответ получен чуть выше ...

   
Rambler's Top100
вверх

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