Использование NULL для обозначения отсутствия значения может немного сохранить место, особенно для числовых типов полей, но и увеличить время выборки, если поле необходимо индексировать.
NULL нафиг не нужен, если все его свойства не используются...
Если вы сравниваете значение NULL с другим значением NULL или любым другим значением, результатом является то, что значение NULL каждого значения NULL неизвестно. Обычно значение NULL используется для указания того, что данные отсутствуют, неизвестны или неприменимы.
Вы можете использовать это как грубый «набор правил»:
YES , использовать постоянные соединения, если:
- Есть только несколько приложений/пользователей, обращающихся к базе данных, т.е. вы не получите 200 открытых (но, вероятно, бездействующих) подключений, потому что на одном хосте есть 200 разных пользователей.
- База данных работает на другом сервере, к которому вы обращаетесь по сети.
- (Одно) приложение очень часто обращается к базе данных
NO , не используйте постоянные соединения, если:
- Вашему приложению нужно обращаться к базе данных всего 100 раз в час.
- У вас есть много веб-серверов, обращающихся к одному серверу базы данных.
- Вы используете Apache в режиме prefork. Он использует одно соединение для каждого дочернего процесса, что может довольно быстро увеличиваться.
Использование постоянных подключений значительно быстрее, особенно если доступ к базе данных осуществляется по сети. Это не имеет большого значения, если база данных работает на той же машине, но все же это немного быстрее. Однако, как следует из названия, соединение является постоянным, т. е. остается открытым, даже если оно не используется.
Проблема в том, что в «конфигурации по умолчанию» MySQL разрешает только 1000 параллельных «открытых каналов». После этого новые подключения будут отклонены (эту настройку можно изменить). Итак, если у вас есть, скажем, 20 веб-серверов со 100 клиентами на каждом из них, и каждый из них имеет доступ только к одной странице в час, простая математика покажет вам, что вам потребуется 2000 параллельных подключений к базе данных. Это не сработает.
Следовательно: используйте его только для приложений с большим количеством запросов.
SELECT
*
FROM
table_b
WHERE
id IN(SELECT
DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(`keys`, ',', n.digit+1), ',', -1) val
FROM
table_a
INNER JOIN
(SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n
ON LENGTH(REPLACE(`keys`, ',' , '')) <= LENGTH(`keys`)-n.digit
WHERE `id` = 1
);
INSERT INTO `table` (`DATE_CREATE`, `DATE_UPDATE`, `ACTIVE`, `USER_ID`, `VALUE`) VALUES
(NOW(), NOW(), 1, 1, 1),
(NOW(), NOW(), 1, 1, 2),
(NOW(), NOW(), 1, 1, 3),
/*...*/
(NOW(), NOW(), 1, 1, 9999);
Задав вопрос "какая БД быстрее", получишь ответ: "зависит от задачи".
$res = R::getAll('SELECT * FROM `table`');
// <table>
$i = 0;
foreach($res as $item) {
if($i <= 0) {
// <tr>
foreach ($item as $key => $val) {
// Тут печатаем заголовки таблицы - переменная $key
// <td>$key</td>
}
// </tr>
}
// <tr>
foreach ($item as $key => $val) {
// Тут печатаем остальные данные таблицы - переменная $val
// <td>$val</td>
}
// </tr>
$i++;
}
// </table>
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`count` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test` (`name`) VALUES ('строка')
ON DUPLICATE KEY
UPDATE `count` = `count` + 1;
Можно например использовать Redis (increment)...
Где ключ будет "строка" (в данном случае kot например).
Перед записью ныряем в Redis, подкручиваем "счётчик" и далее берем это значение и записываем в MySQL в поле slug:
kot-ЗНАЧНИЕ_СЧЁТЧИКА
В итоге один запрос в Redis и один INSERT в MySQL...
Понятна мысля?)
P.S.: Redis можно и на MySQL тож заменить...используя мой первый вариант в ответе в качестве счётчика вместо Redis'а...но тут на пару запросов больше выйдет...что и не критично в данном случае думаю...
Postgres создан с учетом расширяемости, соответствия стандартам, масштабируемости и целостности данных - иногда в ущерб скорости. Поэтому для простых рабочих процессов с большим количеством операций чтения Postgres может оказаться худшим выбором, чем MySQL.
SELECT COUNT(*) AS `ALL`, SUM(IF(`count` IS NULL, 1, `count`)) AS `ALL_SUM` FROM `table`;
/*
ALL - общее кол-во записей
ALL_SUM - сумма столбца `count` с учётом, что NULL считаем за единицу
*/
SELECT *, COUNT(*) AS `ALL`, SUM(IF(`count` IS NULL, 1, `count`)) AS `ALL_SUM` FROM `table` GROUP BY `id`;
/*
Это по каждой записи суммарное кол-во в поле `count` с учётом, что NULL считаем за единицу
*/
SELECT *, IF(`count` IS NULL, 1, `count`) AS `ALL_SUM` FROM `table`