Форум, знакомства, фото, чат, общение

Здравствуйте, гость ( Вход | Регистрация )

Приглашаем Информационных Партнеров!
> Случайные изображения












> Как Лучше Организовать Базу Данных В Mysql?

, советы по оптимизации php и mysql
Wyvvernbuse
сообщение 2.11.2009, 11:12
Сообщение #1


Новичок
*

Группа: Икринка
Сообщений: 4
Регистрация: 26.10.2009
Из: Russia
Пользователь №: 16792



Как лучше организовать базу данных в mysql?
планируется что база будет большая, и запросов будет много и нагрузка будет расти, что лучше делать одну большую таблицу и пихать по максимуму в нее инфу, или дробить узко направлено на мелкие таблички? интересно с точки зрения скорости обработки , нагрузки на сервер, и возможно безопасности инфы например стоит ли инфу какую дублировать в двух таблицах или не стоит это делать ? сейчас ситуация такая, мне надо например куда-то впихнуть права доступа к разному функционалу (специфическому не доступному большинству) вот я и думаю сделать отдельную таблицу, или сделать столбец дополнительный в той что есть ?

и еще вопрос про дублирование и безопасность, стоит дублировать инфу связанную например с бух учетом ? например в одну таблицу доступ только клиентов а в другую с другим набором инфы доступ персонала ? например бухгалтеров? или не надо эти дубли и все делать в одной таблице и не плодить дубли ?

Так же буду рад любым советам по вопросу оптимизации php и mysql
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (20 - 27)
шпунтик
сообщение 28.2.2011, 17:30
Сообщение #21


Опытный Пользователь
****

Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435



Используте ORM
Используя ORM, можно получить определенную оптимизацию работы. Все, что можно сделать с помощью ORM, можно сделать и вручную. Но это требует дополнительной работы и более высокого уровня знаний.
ORM замечателен для «ленивой» загрузки данных. Это означает выборку данных по мере необходимости. Но необходимо быть осторожным, т.к это может привести к появлению множества маленьких запросов, что приведет к снижению производительности.
ORM также может объединять несколько запросов в пакеты, вместо отправки каждого отдельно.
Моя любимая ORM для PHP — Doctrine. Я уже писал статью об установке Doctrine в CodeIgniter.
Go to the top of the page
 
+Quote Post
шпунтик
сообщение 28.2.2011, 17:31
Сообщение #22


Опытный Пользователь
****

Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435



Будьте осторожны с постоянными соединениями
Постоянные соединения предназначены для уменьшения расходов на установление связи с MySQL. Когда соединение создается, оно остается открытым после завершения работы скрипта. В следующий раз, этот скрипт воспользуется этим же соединением.mysql_pconnect() в PHPНо это звучит хорошо только в теории. Из моего личного опыта (и опыта других), использование этой возможности не оправдывается. У вас будут серьезные проблемы с ограничением по числу подключений, памятью и так далее.
Apache создает много параллельных потоков. Это основная причина, почему постоянные соединения не работаю так хорошо, как бы хотелось. Перед использованием mysql_pconnect() посоветуйтесь с вашим сисадмином.
Go to the top of the page
 
+Quote Post
шпунтик
сообщение 28.2.2011, 17:34
Сообщение #23


Опытный Пользователь
****

Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435



Использование MyISAM вместо InnoDB - ошибка

В MySQL можно использовать разные типы таблиц, наиболее распространены MyISAM и InnoDB.

MyISAM используется по умолчанию. Однако, скорее всего это не правильный выбор! MyISAM не поддерживает внешние ключи и транзакции, очень важны для сохранения целостности данных. К тому же, при создании новой записи или редактировании старой, блокируется вся таблица, что может нехорошо сказаться на производительности.

Решение просто - используйте InnoDB.

Go to the top of the page
 
+Quote Post
шпунтик
сообщение 28.2.2011, 17:35
Сообщение #24


Опытный Пользователь
****

Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435



Использование функций mysql вместо mysqli - ошибка

PHP предоставляет функции библиотеки MySQL с самого начала (или почти с самого, не важно). Многие приложения используют mysql_connect, mysql_query, mysql_fetch_assoc и т.д., но что написано в мануале PHP:

"If you are using MySQL versions 4.1.3 or later it is strongly recommended that you use the mysqli extension instead."

mysqli, другая библиотека для работы с MySQL (MySQL improved - улучшенная работа с MySQL), имеет следующие преимущества:

объектно-ориентированный интерфейс

подготовленные выражения (prepared statements) (которые помогают предотвратить SQL-инъекции и улучшить производительность)

множественные операторы и поддержка транзакций.

Так же можно использовать PDO, если нужна возможность работы с несколькими базами.
Go to the top of the page
 
+Quote Post
шпунтик
сообщение 28.2.2011, 17:39
Сообщение #25


Опытный Пользователь
****

Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435



Используются неправильные типы данных - ошибка

MySQL предлагает широкий выбор типов данных: строки, числа, время. Если хотите хранить дату используйте тип DATE или DATETIME. Использование STRING вместо INTEGER сделает запросы более сложными, а иногда и вовсе невыполнимыми.

Часто кажется заманчивым использовать новый формат данных, например, сериализовать PHP объект в строку и сохранить. Хорошо подумайте, так ли это необходимо, и не будет ли потом проблем с кодом и базой.
Go to the top of the page
 
+Quote Post
шпунтик
сообщение 28.2.2011, 17:39
Сообщение #26


Опытный Пользователь
****

Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435



Использование PHP, там где нужна MySQL - ошибка

Если вы только начинаете работать с MySQL, очень заманчиво использовать возможности языка программирования для решения каких-либо возникающих проблем. Это может привести к ненужному и медленному коду. Например, вместо использования цикла на PHP для расчета среднего значения, нужно воспользоваться функцией MySQL avg().

Так же не стоит делать запросы в цикле. Более эффективно сделать запрос и пройтись результату циклом.

В общем, используйте сильные стороны базы данных. Знание SQL сильно поможет в этом.
Go to the top of the page
 
+Quote Post
шпунтик
сообщение 28.2.2011, 17:42
Сообщение #27


Опытный Пользователь
****

Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435



еще одна ошибка - Недостаточное или избыточное индексирование

Общее правило - индексы должны быть созданы на все поля использующиеся в WHERE и JOIN.

К примеру, у нас есть таблица пользователей с полями id (первичный ключ) и email. При входе в систему, MySQL должен найти id соответствующий введенному email. При использовании индекса, MySQL может применить быстрый алгоритм поиска, выдав результат почти мгновенно. Без индекса будет проходиться вся таблица, пока не найдется нужная запись.

Заманчиво добавить индекс к каждой колонке, но они генерируются заново при каждой операции INSERT и UPDATE. Это скажется на производительности; добавляйте индексы только там где они нужны.
Go to the top of the page
 
+Quote Post
шпунтик
сообщение 28.2.2011, 17:43
Сообщение #28


Опытный Пользователь
****

Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435



Дополнительно - смотрите и на другие СУБД.

MySQL наиболее широко используемая PHP-разработчиками база данных, но это ведь не единственный вариант. PostgreSQL и Firebird - ближайшие конкуренты MySQL: и та и другая open-source и развиваются сообществом разработчиков. Microsoft предоставляет SQL Server Express, Oracle - 10g Express, оба продукта имеют бесплатную версию. Для маленьких или встраиваемых приложений может быть использована SQLite.

Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic

 


Текстовая версия Сейчас: 25.5.2018, 17:39

Как Лучше Организовать Базу Данных В Mysql? - Форум




Рейтинг@Mail.ru Rambler's Top100

forum.ribca.net | Web Дизайн: WonderWorker | http://Ribca.Net