2011-04-15 2 views
0

1) В двигателях mysql MyISAM лучше или InnoDB?2 вопрос о лучшей оптимизации дизайна базы данных

2) я хочу программирования КМП, что он может добавить сообщение с мульти категории , как я должен разработать свою базу данных, чтобы иметь более высокую производительность нескольких запросов?

в php как можно перечислить сообщения, которые относятся к категории = 1?

спасибо

ответ

1

1) Если вам нужны внешние ключи отношений на уровне БД использовать InnoDB другое использование MyISAM

2) Вы можете хранить все категории в одну таблицу со схемой так

create table categories (
Category_ID int NOT NULL, 
ParentCategory_ID int NOT NULL default 0, 
CategoryName varchar(150) 
); 

с cATEGORY_ID первичного ключа

3)

$sql = select * from posts where category_id = 1; 
mysql_query($sql); 

редактировать: Схема после таблицы (пример)

create table posts (
    Post_ID int NOT NULL, 
    Category_IDs varchar(50) NOT NULL, 
    POSTDescription varchar(1000), 
    POSTTime int NOT NULL 
) 

Post_ID является первичным ключом posts таблицы.

примечание к Category_IDs теперь varchar магазина значение категорий в нем как 1,2,3, если ваш пост принадлежит cateory 1,2 и 3 .. и для удаления всех сообщений, относящихся к категории 1 будет запускаться следующим запросом

$sql = DELETE 
FROM `posts` 
WHERE FIND_IN_SET('1', `Category_IDs`) >0; 
+0

нет нет! У меня есть таблица категорий, похожая на таблицу категорий, мне нужна таблица для posts_categories для хранения всех категорий сообщения, –

+0

о вопросе 1, когда нужно использовать внешний ключ? –

+0

Вы имеете в виду, что сообщение может принадлежать нескольким категориям в вашем случае? и вам нужен внешний ключ, если вы хотите связать две таблицы. например вы хотите, чтобы ваши сообщения были связаны с их категориями, тогда вы ставите 'Category_ID' в качестве внешнего ключа в таблице сообщений. –

1

Там нет однозначного ответа, поскольку это зависит от ваших потребностей, но многие люди будут уже упоминали такие вещи, как:

  • InnoDB имеет блокировку на уровне строк по сравнению с MyISAM таблицы блокировки так InnoDB может обрабатывать больше одновременных запросов.
  • InnoDB является транзакционной так вставками, как правило, будет медленнее, чем MyISAM
  • InnoDB является собственным СУБД двигателя таким образом поддерживает ссылочная целостность (сделки КИСЛОТА бла бла бла)
  • InnoDB является более надежным, чем MyISAM
  • MyISAM быстрее, чем InnoDB для чтения (миф)
  • таблицы MyISAM имеют меньшие следы, чем InnoDB из них (миф)

Однако многие люди не будут упоминать InnoDB кластерный прима ry ключевые индексы и то, как хорошо спроектированная таблица innodb будет легко выполнять эквивалентную myisam из-за этого.

Вот две ссылки, объясняющие кластерные индексы:

http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html

http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/

Кроме того, посмотрите на следующие примеры и статьи (второй пример может иметь особое значение)

Надеется, что это помогает :)

+0

Ссылочная целостность не имеет ничего общего с тем, является ли СУБД (значительно меньше базы данных) реляционная или нет. MySQL основан на SQL, что означает, что он не является действительно реляционным. Использование InnoDB не делает MySQL более или менее СУБД, чем при использовании MyISAM. – sqlvogel

+1

@dportas, мы здесь, чтобы помочь другим не критиковать их по их вопросам. –

+0

отредактированный пост для включения (не правильная СУРБД - ACID bla bla bla bla), но это ответ на результат, основанный на чтении. –

Смежные вопросы