[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Количество столбцов и вывод данных в массив
maximka787
Всем привет. У меня два вопроса по 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 данными из MYSQL. По сути мы копируем массив $row в массив $m
$m[$row['id']]['name'] = $row['name'];
$m[$row['id']]['addres'] = $row['addres'];
}
}


return $m;
//идеально было бы как-то сделать return $row; без этой части //наполняем массив $m данными из MYSQL
}


То есть, если добавляется поле `age` (возраст клиента), то мне обязательно нужно будет дописать $m[$row['id']]['age'] = $row['age'];

Можно ли, как-то наполнить массив $m копированием массива $row?

_____________
..Работает - не трогай!
AllesKlar
while($row = mysql_fetch_assoc($result))
{
//наполняем массив $m данными из MYSQL. По сути мы НЕ копируем массив $row в массив $m, а заполняем массив $m массивами $row
$m[] = $row;
}


_____________
[продано копирайтерам]
Игорь_Vasinsky
Цитата
50 столбцов и все

Цитата
У меня информация об одном пользователе занимает

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

такая реализация - очень редка даже на очень высоконагруженных серверах - когда не остаётся вариантов чтобы снизить нагрузку на сервер БД

_____________
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
AllesKlar
Благодарю, попробую.

Цитата
такая реализация - очень редка даже на очень высоконагруженных серверах - когда не остаётся вариантов чтобы снизить нагрузку на сервер БД

То есть если будет одна таблица с 50 полями, она будет работать быстрее чем данные раскиданные по таблицам?

_____________
..Работает - не трогай!
Игорь_Vasinsky
зависит от операций которые ты проводишь с данными.
как я и говорил - рациональней раскидать по "справочникам"

это речь о правилах нормализации бд

_____________
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
while($row = mysql_fetch_assoc($result))
{
$m[$row['id']] = $row;
}

Я никогда не задавался вопросом о том, как количество столбцов влияет на нагрузку. Но если уж заморочиться, то вполне возможно, что стоит вынести отдельные поля в другую таблицу. Выносить нужно те поля, которые собственно реже всего используются, например те, которые отображаются исключительно при просмотре профиля пользователя. В основной таблице оставить только те, которые используются постоянно. Главное сделать так, чтобы избежать частых JOIN'ов.

_____________
Gear Framework
Gear Framework на Github
inpost
maximka787
Есть такая вещь как проверить ручками. У меня таблицы есть по 100 колонок...

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
maximka787
Парни, а почему вот этот код
$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
да потому что нефиг 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
Цитата (maximka787 @ 15.04.2014 - 15:46)
Работать с этим можно, но вроде как вообще ненужная избыточность выводится

Замени mysql_fetch_array() на mysql_fetch_assoc(), либо используй у mysql_fetch_array() дополнительный параметр, указывающий на выборку только ассоциативных элементов.
Будет в 2 раза меньше элементов - нагрузка на БД будет поменьше.

Далее. Тебе на самом деле всегда нужные все столбцы и все строки из таблицы?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
sergeiss
Игорь_Vasinsky, ну шо ты так нервничаешь? wink.gif Ну не интересно человеку читать хэлпы, ему ж интереснее пообщаться на форуме smile.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
maximka787
Спасибо парни. Невнимательность... Не увидел концовку функции.

Цитата
Далее. Тебе на самом деле всегда нужные все столбцы и все строки из таблицы?

нет, это именно в конкретном примере нужно выводить все столбцы.


а так, я в самом запросе не делаю *

Цитата
6 лет человек на форуме.

да я кодером по нормальному стал только 2 года назад. Сам удивился, нихера 6 лет))))

_____________
..Работает - не трогай!
maximka787
Парни, помогите еще, решил тему новую не делать, вопрос возник. Тоже нигде не могу найти ответ на него, тут уже мануалы не помогают, а опыт.

Есть объект и мне нужно задать ему статус 0 или 1, какой тип поля лучше делать? ENUM или TINYINT? Перерыв интернет, больше мнений за использование TINYINT(1) INSIGNED тк он быстрее. Важна больше скорость чтения, чем записи. Это первый вопрос.

И второй. Если есть таблица и одно из полей имеет значения '-1','0','1' какой тип поля сюда подойдет больше? Важна скорость чтения, а не записи, тк будет выводиться внушительный массив строк и эти '-1','0','1' будут использоваться как числа для расчета.

_____________
..Работает - не трогай!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.