Раздел конфигурации кажется звуковым, поскольку он работает если, когда к страницам обычно получают доступ. Я попробовал другие предложенные конфигурации, но проблема все еще там.
я сомневаюсь, что проблема находится в поставщике Сессии, так как она работает без маршрутизации.
Используйте оба! Естественные ключи предотвращают повреждение базы данных (лучше сказать «несогласованность»). Когда «правильный» естественный ключ (для устранения повторяющихся строк) будет работать плохо из-за длины или количества задействованных столбцов, в целях повышения производительности можно добавить суррогатный ключ, который будет использоваться в качестве внешних ключей в других таблицах вместо естественный ключ ... Но естественный ключ должен оставаться в качестве альтернативного ключа или уникального индекса, чтобы предотвратить повреждение данных и обеспечить согласованность базы данных ...
Большая часть ура (в «дебатах» по этому вопросу) может быть из-за того, что является ложным предположением - что вы должны использовать Первичный ключ для объединений и внешних ключей в других таблицах. ЭТО ЛОЖЬ. Вы можете использовать ЛЮБОЙ ключ в качестве цели для внешних ключей в других таблицах. Это может быть первичный ключ, альтернативный ключ, или любой уникальный индекс, или уникальное ограничение. А что касается объединений, вы можете использовать что угодно для условия объединения, оно даже не должно быть ключом, или идентификатором, или даже уникальным !! (хотя, если он не уникален, вы получите несколько строк в декартовом произведении, которое оно создает).
Для суррогатного ключа может использоваться любой тип, например VARCHAR
для сгенерированного системой slug
или что-то еще.
Однако наиболее часто используемые типы для суррогатных ключей - это INTEGER
и RAW (16)
(или любой другой тип вашей RDBMS
действительно используется для GUID
),
SSN
) занимает точно такое же время. Сравнение VARCHAR
] учитывают сопоставление, и они обычно длиннее целых, что делает их менее эффективными.
Сравнение набора из двух INTEGER
, вероятно, также менее эффективно, чем сравнение одного INTEGER
.
Для небольших по размеру типов данных эта разница, вероятно, составляет процентов времени, необходимого для выборки страниц, обхода индексов, получения защелок базы данных и т. Д.
И вот числа (в MySQL
):
CREATE TABLE aint (id INT NOT NULL PRIMARY KEY, value VARCHAR(100));
CREATE TABLE adouble (id1 INT NOT NULL, id2 INT NOT NULL, value VARCHAR(100), PRIMARY KEY (id1, id2));
CREATE TABLE bint (id INT NOT NULL PRIMARY KEY, aid INT NOT NULL);
CREATE TABLE bdouble (id INT NOT NULL PRIMARY KEY, aid1 INT NOT NULL, aid2 INT NOT NULL);
INSERT
INTO aint
SELECT id, RPAD('', FLOOR(RAND(20090804) * 100), '*')
FROM t_source;
INSERT
INTO bint
SELECT id, id
FROM aint;
INSERT
INTO adouble
SELECT id, id, value
FROM aint;
INSERT
INTO bdouble
SELECT id, id, id
FROM aint;
SELECT SUM(LENGTH(value))
FROM bint b
JOIN aint a
ON a.id = b.aid;
SELECT SUM(LENGTH(value))
FROM bdouble b
JOIN adouble a
ON (a.id1, a.id2) = (b.aid1, b.aid2);
t_source
- это просто фиктивная таблица с 1,000,000
строк.
aint
и adouble
, bint
] и bdouble
содержат точно такие же данные, за исключением того, что aint
имеет целое число как ПЕРВИЧНЫЙ КЛЮЧ
, а adouble
имеет пару из двух идентичные целые числа.
Разница в производительности, если таковая имеется, находится в пределах диапазона колебаний.
А вот числа (в MySQL
):
CREATE TABLE aint (id INT NOT NULL PRIMARY KEY, value VARCHAR(100));
CREATE TABLE adouble (id1 INT NOT NULL, id2 INT NOT NULL, value VARCHAR(100), PRIMARY KEY (id1, id2));
CREATE TABLE bint (id INT NOT NULL PRIMARY KEY, aid INT NOT NULL);
CREATE TABLE bdouble (id INT NOT NULL PRIMARY KEY, aid1 INT NOT NULL, aid2 INT NOT NULL);
INSERT
INTO aint
SELECT id, RPAD('', FLOOR(RAND(20090804) * 100), '*')
FROM t_source;
INSERT
INTO bint
SELECT id, id
FROM aint;
INSERT
INTO adouble
SELECT id, id, value
FROM aint;
INSERT
INTO bdouble
SELECT id, id, id
FROM aint;
SELECT SUM(LENGTH(value))
FROM bint b
JOIN aint a
ON a.id = b.aid;
SELECT SUM(LENGTH(value))
FROM bdouble b
JOIN adouble a
ON (a.id1, a.id2) = (b.aid1, b.aid2);
t_source
- это просто фиктивная таблица с 1,000,000
строк.
aint
и adouble
, bint
и bdouble
содержат точно такие же данные, за исключением того, что aint
имеет целое число в качестве ПЕРВИЧНОГО КЛЮЧА
, в то время как adouble
имеет пару двух одинаковых целых чисел.
Разница в производительности, если таковая имеется, находится в пределах диапазона колебаний.
А вот числа (в MySQL
):
CREATE TABLE aint (id INT NOT NULL PRIMARY KEY, value VARCHAR(100));
CREATE TABLE adouble (id1 INT NOT NULL, id2 INT NOT NULL, value VARCHAR(100), PRIMARY KEY (id1, id2));
CREATE TABLE bint (id INT NOT NULL PRIMARY KEY, aid INT NOT NULL);
CREATE TABLE bdouble (id INT NOT NULL PRIMARY KEY, aid1 INT NOT NULL, aid2 INT NOT NULL);
INSERT
INTO aint
SELECT id, RPAD('', FLOOR(RAND(20090804) * 100), '*')
FROM t_source;
INSERT
INTO bint
SELECT id, id
FROM aint;
INSERT
INTO adouble
SELECT id, id, value
FROM aint;
INSERT
INTO bdouble
SELECT id, id, id
FROM aint;
SELECT SUM(LENGTH(value))
FROM bint b
JOIN aint a
ON a.id = b.aid;
SELECT SUM(LENGTH(value))
FROM bdouble b
JOIN adouble a
ON (a.id1, a.id2) = (b.aid1, b.aid2);
t_source
- это просто фиктивная таблица с 1,000,000
строк.
aint
и adouble
, bint
и bdouble
содержат точно такие же данные, за исключением того, что aint
имеет целое число в качестве ПЕРВИЧНОГО КЛЮЧА
, в то время как adouble
имеет пару двух одинаковых целых чисел.
Разница в производительности, если таковая имеется, находится в пределах диапазона колебаний.
за исключением того, что aint
имеет целое число в качестве ПЕРВИЧНОГО КЛЮЧА
, а adouble
имеет пару двух одинаковых целых чисел.
Разница в производительности, если таковая имеется, находится в пределах диапазона колебаний.
за исключением того, что aint
имеет целое число в качестве ПЕРВИЧНОГО КЛЮЧА
, а adouble
имеет пару двух одинаковых целых чисел.
Разница в производительности, если таковая имеется, находится в пределах диапазона колебаний.