maximka787
14.04.2014 - 14:16
Всем привет. У меня два вопроса по MYSQL, они простые, но я что-то не совсем понимаю.
1. Влияет ли как-то количество столбцов на работу сервера (скорость, правильность реализации)?
У меня информация об одном пользователе занимает 50 столбцов и все. Ни больше не меньше. Делать реляционную модель таблицы (user, id_param, val) смысла нет. Грубо говоря, ничего страшного, если я просто создам таблицу с 50 полями? По-моему очень большая будет. Делают ли так вообще?
2. Есть часть скрипта:
function get_all()
{
$m = array();
$result = mysql_query("SELECT * FROM `tab`");
if(mysql_num_rows($result) > 0)
{
while($row = mysql_fetch_array($result))
{
$m[$row['id']]['name'] = $row['name'];
$m[$row['id']]['addres'] = $row['addres'];
}
}
return $m;
}
То есть, если добавляется поле `age` (возраст клиента), то мне обязательно нужно будет дописать $m[$row['id']]['age'] = $row['age'];
Можно ли, как-то наполнить массив $m копированием массива $row?
_____________
..Работает - не трогай!
AllesKlar
14.04.2014 - 14:30
while($row = mysql_fetch_assoc($result))
{
$m[] = $row;
}
_____________
[продано копирайтерам]
Игорь_Vasinsky
14.04.2014 - 14:34
Цитата |
У меня информация об одном пользователе занимает |
я думаю для твоего случая нужно было данные раскидать по нескольким таблицам.
такая реализация - очень редка даже на очень высоконагруженных серверах - когда не остаётся вариантов чтобы снизить нагрузку на сервер БД
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
maximka787
14.04.2014 - 14:55
AllesKlar
Благодарю, попробую.
Цитата |
такая реализация - очень редка даже на очень высоконагруженных серверах - когда не остаётся вариантов чтобы снизить нагрузку на сервер БД |
То есть если будет одна таблица с 50 полями, она будет работать быстрее чем данные раскиданные по таблицам?
_____________
..Работает - не трогай!
Игорь_Vasinsky
14.04.2014 - 15:53
зависит от операций которые ты проводишь с данными.
как я и говорил - рациональней раскидать по "справочникам"
это речь о правилах нормализации бд
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
linker
14.04.2014 - 16:44
while($row = mysql_fetch_assoc($result))
{
$m[$row['id']] = $row;
}
Я никогда не задавался вопросом о том, как количество столбцов влияет на нагрузку. Но если уж заморочиться, то вполне возможно, что стоит вынести отдельные поля в другую таблицу. Выносить нужно те поля, которые собственно реже всего используются, например те, которые отображаются исключительно при просмотре профиля пользователя. В основной таблице оставить только те, которые используются постоянно. Главное сделать так, чтобы избежать частых JOIN'ов.
_____________
Gear FrameworkGear Framework на Github
inpost
14.04.2014 - 16:44
maximka787Есть такая вещь как проверить ручками. У меня таблицы есть по 100 колонок...
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
maximka787
15.04.2014 - 15:46
Парни, а почему вот этот код
$m[$row['id']] = $row;
или этот
$m[] = $row;
Дают такой ответ: (дублируются данные выводимые)
Array
(
[0] => Array
(
[0] => 1
[id] => 1
[1] => item
[name] => item
[2] => 2014-04-15
[date] => 2014-04-15
[3] => описание
[about] => описание
)
)
Работать с этим можно, но вроде как вообще ненужная избыточность выводится
_____________
..Работает - не трогай!
Игорь_Vasinsky
15.04.2014 - 15:52
да потому что нефиг mysql_fetch_array() юзать если тебе нужен тока ассоц массив
6 лет человек на форуме.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sergeiss
15.04.2014 - 15:54
Цитата (maximka787 @ 15.04.2014 - 15:46) |
Работать с этим можно, но вроде как вообще ненужная избыточность выводится |
Замени
mysql_fetch_array() на
mysql_fetch_assoc(), либо используй у
mysql_fetch_array() дополнительный параметр, указывающий на выборку только ассоциативных элементов.
Будет в 2 раза меньше элементов - нагрузка на БД будет поменьше.
Далее. Тебе на самом деле всегда нужные все столбцы и все строки из таблицы?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
sergeiss
15.04.2014 - 15:55
Игорь_Vasinsky, ну шо ты так нервничаешь?

Ну не интересно человеку читать хэлпы, ему ж интереснее пообщаться на форуме
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
maximka787
15.04.2014 - 16:53
Спасибо парни. Невнимательность... Не увидел концовку функции.
Цитата |
Далее. Тебе на самом деле всегда нужные все столбцы и все строки из таблицы? |
нет, это именно в конкретном примере нужно выводить все столбцы.
а так, я в самом запросе не делаю *
Цитата |
6 лет человек на форуме. |
да я кодером по нормальному стал только 2 года назад. Сам удивился, нихера 6 лет))))
_____________
..Работает - не трогай!
maximka787
17.04.2014 - 11:47
Парни, помогите еще, решил тему новую не делать, вопрос возник. Тоже нигде не могу найти ответ на него, тут уже мануалы не помогают, а опыт.
Есть объект и мне нужно задать ему статус 0 или 1, какой тип поля лучше делать? ENUM или TINYINT? Перерыв интернет, больше мнений за использование TINYINT(1) INSIGNED тк он быстрее. Важна больше скорость чтения, чем записи. Это первый вопрос.
И второй. Если есть таблица и одно из полей имеет значения '-1','0','1' какой тип поля сюда подойдет больше? Важна скорость чтения, а не записи, тк будет выводиться внушительный массив строк и эти '-1','0','1' будут использоваться как числа для расчета.
_____________
..Работает - не трогай!
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.