Ayola.net
Новости: В связи с обилием спама, постинг на форуме временно закрыт.

Для связи с поддержкой используйте тикеты в панели управления.
 
*
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь. Октябрь 18, 2017, 14:40:29


Войти


Страниц: [1]
  Печать  
Автор Тема: Оптимизация скрипта, особенно SQL  (Прочитано 4290 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Sergiy
Старший Новичёк
**

Карма: 5
Сообщений: 95


Отец Сергий


Просмотр профиля WWW
« : Май 30, 2008, 18:13:32 »

В общем, у меня, говорят, неоптимизированный скрипт, который при 40 человеках в онлайне, посылает столько запросов к sql, что тормозит, и даже сайт отключается.
Помогли только англичане -
1)By default only 'id' fields in your tables have primary index key and only indexing by that fields.  I am indexed all important fields in game (which was most used by queries).
Что значит поле 'id' имело primary индексацию? И как проиндексировать другие, так, как он?

2)What is not optimized query ? SELECT * FROM  but you need only few fields for use from that array.  If you change it to SELECT field, field, field, field FROM then that query was optimized because mysql will returns data faster, and also PHP will get that data faster, and results will be fastest.
Допустим у меня есть запрос -
    $MaxColo = doquery("SELECT * FROM {{table}} WHERE id={$user['id']}",'users',true);
    $iMaxColo = $MaxColo['colonisation_tech'] + 1;
В таблице user много полей, сейчас нужна только одна - colonisation_tech.
doquery - это такую фунцию создали ранее...
Как этот запрос будет выглядеть оптимизированно?
Записан

R@mm$+ein
Старший Новичёк
**

Карма: 4
Сообщений: 89



Просмотр профиля WWW
« Ответ #1 : Май 30, 2008, 18:16:06 »

http://www.ayola.net/forum/index.php/topic,3733.0.html
Записан
Sergiy
Старший Новичёк
**

Карма: 5
Сообщений: 95


Отец Сергий


Просмотр профиля WWW
« Ответ #2 : Июнь 02, 2008, 16:49:39 »

Скажите хотя бы, какие поля таблиц желательно индексировать?
И как посмотреть, какие поля уже индексированы?

А журналирование запросов мускула можно включить в файле my.ini, включив лог запросов и указав, в какой файл  писать. Но я то не имею к нему доступа. Никак для моего сайта и моей БД я не могу лог включить?
Записан

North
Новичёк
*

Карма: 0
Сообщений: 30


Просмотр профиля
« Ответ #3 : Июнь 03, 2008, 00:38:05 »

Про оптимизацию запросов хорошая статья есть вот тут:

http://phpclub.ru/detail/article/mysql_optimize
Записан
Astraller™
Маэстро
*****

Карма: 151
Сообщений: 1389

Вселенское зло


Просмотр профиля WWW
« Ответ #4 : Июнь 03, 2008, 00:52:02 »

2)What is not optimized query ? SELECT * FROM  but you need only few fields for use from that array.  If you change it to SELECT field, field, field, field FROM then that query was optimized because mysql will returns data faster, and also PHP will get that data faster, and results will be fastest.
Допустим у меня есть запрос -
    $MaxColo = doquery("SELECT * FROM {{table}} WHERE id={$user['id']}",'users',true);
    $iMaxColo = $MaxColo['colonisation_tech'] + 1;
В таблице user много полей, сейчас нужна только одна - colonisation_tech.
doquery - это такую фунцию создали ранее...
Как этот запрос будет выглядеть оптимизированно?
Код:
<?php
    $MaxColo 
doquery("SELECT `colonisation_tech` FROM {{table}} WHERE id={$user['id']}",'users',true);
    
$iMaxColo $MaxColo['colonisation_tech'] + 1;
?>

Записан

Гамлета здесь больше нет. Осталась только тень.
Sergiy
Старший Новичёк
**

Карма: 5
Сообщений: 95


Отец Сергий


Просмотр профиля WWW
« Ответ #5 : Июнь 03, 2008, 14:55:21 »

Код:
<?php
    $MaxColo 
doquery("SELECT `colonisation_tech` FROM {{table}} WHERE id={$user['id']}",'users',true);
    
$iMaxColo $MaxColo['colonisation_tech'] + 1;
?>

Спасибо, а почему тогда замена
$login doquery("SELECT * FROM {{table}} WHERE `username` = '" mysql_escape_string($_POST['username']) . "' LIMIT 1""users"true); 
на это не работает? Ошибка синтаксиса
$login doquery("SELECT `id` `username` `password` FROM {{table}} WHERE `username` = '" mysql_escape_string($_POST['username']) . "' LIMIT 1""users"true);
Записан

atimur
Просветлённый
****

Карма: 59
Сообщений: 990


Живу в SanCity


Просмотр профиля WWW
« Ответ #6 : Июнь 03, 2008, 15:32:43 »

Код:
<?php
$login 
doquery("SELECT `id`, `username`, `password` FROM {{table}} WHERE `username` = '" mysql_escape_string($_POST['username']) . "' LIMIT 1"'users'true);
?>
« Последнее редактирование: Июнь 03, 2008, 15:39:30 от atimur » Записан

- Правда, она всегда глаза режет...
- Капча - Идите лесом...
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.13 | SMF © 2006, Simple Machines LLC

2003-2008 © ООО "Инфотур" - Бесплатный хостинг Ayola.net
Valid XHTML 1.0! Valid CSS! Dilber MC Theme by HarzeM
Страница сгенерирована за 0.063 секунд. Запросов: 17.