MySQL таблица / столбцы - вопрос производительности - PullRequest
0 голосов
/ 13 октября 2009

Я работаю над базовой php / mysql CMS и у меня есть несколько вопросов относительно производительности.

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

На данный момент я использую

SHOW TABLES;

, чтобы получить список всех таблиц в базе данных, затем зациклить массив имен таблиц и выполнить

SHOW COLUMNS;

на каждом.

Меня беспокоит то, что моя CMS может получить удар по производительности здесь. Я думал об использовании статического массива имен таблиц, но нужно сохранять его гибкость, так как я внедряю систему плагинов.

У кого-нибудь есть какие-либо предложения о том, как я могу сделать это более кратким?

Thankyou

Ответы [ 4 ]

3 голосов
/ 14 октября 2009

Если вы используете mysql 5+, вы найдете базу данных information_schema полезной для вашей задачи. В этой базе данных вы можете получить доступ к информации таблиц, столбцов, ссылок с помощью простых запросов SQL. Например, вы можете найти, есть ли конкретный столбец в таблице:

SELECT count(*) from COLUMNS 
WHERE 
    TABLE_SCHEMA='your_database_name' AND
    TABLE_NAME='your_table' AND
    COLUMN_NAME='your_column';

Вот список таблиц с определенным столбцом существует:

SELECT TABLE_SCHEMA, TABLE_NAME from COLUMNS WHERE COLUMN_NAME='your_column';
1 голос
/ 13 октября 2009

Поскольку вы в настоящее время дважды нажимаете на базу данных, прежде чем выполнять свой фактический запрос, вы можете рассмотреть возможность просто обернуть фактический запрос в блок try{}. Тогда, если запрос работает, вы сделали только одну операцию вместо 3. И если запрос не выполнен, вы все равно потратили впустую только один запрос вместо потенциально двух.

Важным предупреждением (как обычно!) Является то, что любой пользовательский ввод должен быть очищен перед этим.

0 голосов
/ 13 октября 2009

Полагаю, лучше всего поместить все эти файлы, которые вы получаете из Показать таблицы и т. Д., В файл и просто включить его, вместо того, чтобы запускать его каждый раз. Или внедрите какое-то кэширование, если проект все еще находится в разработке и вы думаете, что поля изменятся.

0 голосов
/ 13 октября 2009

Вы можете запросить таблицу заранее и сохранить столбцы в слое кеша (то есть memcache или APC). Затем вы можете установить время истечения для файла равным бесконечности и удалять и заново создавать файл кэша только после добавления, обновления и т. Д. Плагина

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...