SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.01.2012 19:10:58

zloymudvin
Участник
Зарегистрирован: 26.01.2012
Сообщений: 4

Первичный ключ

Товарищи подскажите, как лучше сделать таблицу. В таблице должны храниться данные в виде журнала, примерно так

______
|id клиента|  id товара    |
|    1        |        2          |
|    2        |        1          |
|    1        |        2          |

то есть нужно что то вроде журнала куда будут падать id юзеров и id допустим товаров. Получается что таблица остается без первичного ключа. Чем все это чревато? И может есть способ сделать все это по человечески?

Неактивен

 

#2 28.01.2012 20:13:32

simple
Активист
Зарегистрирован: 25.11.2010
Сообщений: 168

Re: Первичный ключ

а почему первичный ключ не повесить на id клиента?
по первичному ключу быстрее происходит выборка,обновление,удаление и вставка строк

Отредактированно simple (28.01.2012 20:15:24)

Неактивен

 

#3 28.01.2012 20:14:09

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Первичный ключ

А зачем он нужен в данном случае?
Единственное уточнение - стоит делать таблицу myisam в этом случае.

Неактивен

 

#4 28.01.2012 20:16:43

zloymudvin
Участник
Зарегистрирован: 26.01.2012
Сообщений: 4

Re: Первичный ключ

vasya написал:

А зачем он нужен в данном случае?
Единственное уточнение - стоит делать таблицу myisam в этом случае.

Почему MyISAM? Я туды и записывать часто буду и читать ее.

Неактивен

 

#5 28.01.2012 20:25:59

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Первичный ключ

update ведь делать не будете?
А только insert возможен одновременно с чтением для myisam. Innodb всегда имеет первичный ключ и даже если вы его не создаете, innodb создаст свой внутренний, т.е. таблица будет занимать больше места.

Неактивен

 

#6 28.01.2012 20:28:48

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Первичный ключ

simple написал:

а почему первичный ключ не повесить на id клиента?

Потому, что он не уникален.


simple написал:

по первичному ключу быстрее происходит выборка,обновление,удаление и вставка строк

Только для innodb, у которого индексы содержат указатели не на данные, а на первичный ключ.

Неактивен

 

#7 28.01.2012 20:39:55

zloymudvin
Участник
Зарегистрирован: 26.01.2012
Сообщений: 4

Re: Первичный ключ

vasya написал:

update ведь делать не будете?
А только insert возможен одновременно с чтением для myisam. Innodb всегда имеет первичный ключ и даже если вы его не создаете, innodb создаст свой внутренний, т.е. таблица будет занимать больше места.

Блин а я всегда считал что, MyISAM нужно использовать только если преобладает запись в таблицу а в остальных случаях лучше InnoDB.
Еще маленький момент SELECTов будет примерно на 30-40% больше чем INSERTов. UPDATEов вообще не будет. Про отсутствие PK в InnoDB я нарыл что
"InnoDB хранит данные с первичным ключами, так что поиск по первичным ключам происходит очень быстро. Данный подход очень полезен для физической оптимизации БД. В случае когда он не применим и дает низкую производительность, то явно его можно не использовать и тогда система создаст невидимый внутренний первичный ключ типа Integer(15) и будет проводить индексацию по нему."

Неактивен

 

#8 28.01.2012 22:31:09

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Первичный ключ

zloymudvin написал:

Блин а я всегда считал что, MyISAM нужно использовать только если преобладает запись в таблицу а в остальных случаях лучше InnoDB.

MyISAM нужно использовать если преобладает чтение.
Насчет одновременного insert и чтения я немного ввел вас в заблуждение. Это будет работать только в один поток, а одновременные записи из разных потоков будут блокировать всю таблицу.

Неактивен

 

#9 28.01.2012 23:23:54

zloymudvin
Участник
Зарегистрирован: 26.01.2012
Сообщений: 4

Re: Первичный ключ

vasya написал:

zloymudvin написал:

Блин а я всегда считал что, MyISAM нужно использовать только если преобладает запись в таблицу а в остальных случаях лучше InnoDB.

MyISAM нужно использовать если преобладает чтение.

Не могу согласиться InnoDB у меня выборку делает почти в двое быстрее. Только что попробовал на тестовой таблице с тремя миллионами записей (без индексов по искомым полям)
SELECT на InnoDB  1.7 sec
SELECT на MyISAM 2.3 sec

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson