Будет ли от этого оптимизация или будет еще хуже?
> EXPLAIN ANALYZE select count(*) from u where val like 'xz%';
-> Aggregate: count(0) (actual time=358.829..358.829 rows=1 loops=1)
-> Filter: (u.val like 'xz%') (cost=1081.88 rows=4995) (actual time=0.388..358.196 rows=4995 loops=1)
-> Index range scan on u using u_val (cost=1081.88 rows=4995) (actual time=0.383..356.709 rows=4995 loops=1)
> EXPLAIN ANALYZE select count(*) from (select id from u where val like 'zx%' limit 11) q;
-> Aggregate: count(0) (actual time=1.609..1.609 rows=1 loops=1)
-> Table scan on q (actual time=0.002..0.005 rows=11 loops=1)
-> Materialize (actual time=1.594..1.601 rows=11 loops=1)
-> Limit: 11 row(s) (actual time=0.089..1.560 rows=11 loops=1)
-> Filter: (u.val like 'zx%') (cost=1183.58 rows=5465) (actual time=0.088..1.555 rows=11 loops=1)
-> Index range scan on u using u_val (cost=1183.58 rows=5465) (actual time=0.082..1.537 rows=11 loops=1)
only_full_group_by
из sql_mode
rows
в выводе EXPLAIN по определению неточные - это оценка, исходя из статистики.group_concat(case when status <> 0 then status end)
если оставить всё, как есть, то primary key будет обновляться при каждой вставкене ключ, а внутренний объект (аналог sequence в других СУБД)
из-за чего, во-первых, он когда-то закончитсячто, прям так много вставок? сделайте поле BIGINT
таблица постоянно будет переиндексироваться (старая с маленьким ключом запись при обновлении будет "подниматься" наверх)вообще не понял, что это значит
как умные люди решают вопрос уникального кортежа в такой таблице?в описанном случае не вижу никаких проблем использовать
insert ... on duplicate key update
В сети советуют убрать в sql_mode only_full_group_by, но проблема в том, что в моей mysql 8 и так нет only_full_group_byправда что ли? А
select @@sql_mode;
что выводит?SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SELECT ANY_VALUE(id), type, ANY_VALUE(price) FROM rooms WHERE id NOT IN ( ... ) GROUP BY type
(?, ?, ?, ?, ?, ?, ?, ?, ?)
на (%s, %s, %s, %s, %s, %s, %s, %s, %s)
$rsMyCredits = $objDBCD14->queryUniqueObject(
"SELECT Balance FROM tbl_users WHERE UserId = '" . $rs->UserId . "' FOR UPDATE"
);
$stmt = $connection->prepare("INSERT INTO UserStreetid(Id, Streetid) VALUES (?, ?) ON DUPLICATE KEY UPDATE Streetid = ?");
$stmt->bind_param("iii", $datatopush[0], $datatopush[1], $datatopush[1]);
if (!$stmt->execute())
echo"Error:".$qpush."<br>".mysqli_error($connection);
SELECT
t.str,
SUM(n)
FROM (
(SELECT str1 as str, COUNT(*) as n FROM tableName WHERE date BETWEEN '2021-01-01' AND '2021-12-31' GROUP BY str1)
UNION
(SELECT str2 as str, COUNT(*) as n FROM tableName WHERE date BETWEEN '2021-01-01' AND '2021-12-31' GROUP BY str2)
) as t
GROUP BY t.str
INSERT INTO posts VALUES (null,'tilte','text',55,'2019-09-31 23:59:59')
defer db.Close()
? query = "INSERT INTO table (id, name, text) VALUES (%s, %s, %s)"
cursor.execute(query, (id, name, text))
Есть какие-то встроенные в СУБД механизмы, позволяющие избежать последствий?