我有一个大约有17M行的MySQL表,在这个表中,我最终执行了大量聚合查询。
在本例中,假设我有index_on_b、index_on_c、compound_index_on_a_b、compound_index_on_a_c
我尝试运行一个查询解释
EXPLAIN SELECT SUM(revenue) FROM table WHERE a = some_value AND b = other_value
我发现选择的索引是index_on_b,但是当我使用查询提示时
SELECT SUM(revenue) FROM table USE INDEX(compound_index_on_a_b
该表在InnoDB表中。这里有一些可能会有帮助的信息。
EXPLAIN SELECT COUNT(*) AS y0_ FROM db.table this_ WHERE this_.id IS NOT NULL;
+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | re
我目前正在使用mysql
我有两个名为person和zim_list_id的表,这两个表都有超过200万行
我想使用zim_list_id表更新person表
我使用的查询是
update person p JOIN zim_list_id z on p.person_id = z.person_id
set p.office_name = z.`Office Name`;
我还在zim_list_id表和person表上创建了索引,我执行的查询是
create index idx_person_office_name on person(`Office_name`);
create ind
我在我的C#应用程序中发布了一个相对简单的SQL查询:
select * from myTable where myValue > 10 order by myValue;
表中有1.8亿行,myValue上有一个索引。在MySQL工作台中运行查询时,它将在0.015秒内返回前1000行。
当我在C#中运行查询时,它会超时。
我怀疑MySqlDataReader和/或MySQL引擎试图在返回之前找到所有匹配的行。
我真正想要的是从我的C#代码中一次读一行。我想把这个查询排队起来,一次从最上面的行中取出行,因为它们是需要的。
在MySQL中是否有合适的编程模式?
尝试优化MySQL查询,该查询使用Group和Max。试图获得最新更新的框架,这些框架在任何过去的日期之前都是活动的。
审计框架表结构:
id bigint pk AI
frame_id bigint fk
name VARCHAR(50)
active int
createdOn DATETIME
updatedOn DATETIME
deletedOn DATETIME
id、frame_id和updatedOn有单独的索引。
当前查询:
SELECT MAX(id) as id1
FROM audit_frame_master
WHERE updatedOn <='
我在一个批处理过程中使用Node.js和MySQL。该过程并发地进行大量查询,并由多个作业组成。我注意到update语句时不时地起作用。
UPDATE `Configuration` SET `Value`='2015-06-08 11:35:00' WHERE `ID`=6
我打开了通用日志,在那里找到了查询,但是表中的数据没有改变。查询大约每5分钟在作业结束时运行一次。但其他工作仍在继续进行查询。
例如: jobA正在进行大量的查询。同时,jobC从配置表中进行选择。然后,jobC执行一系列与配置表无关的查询。一旦jobC完成了一系列操作,它就会对配置表运行两个查询: SE
每隔几秒钟,MySQL就会打开一个文件,而不是关闭它,我们可以通过查询实时地看到它。
SHOW GLOBAL STATUS WHERE variable_name = 'Open_files';
查看打开的文件描述符
sudo ls -la /proc/<pid>/fd | less
显示这些打开的文件大多被删除临时表:
lrwx------ 1 mysql mysql 64 Apr 17 08:56 990 -> /tmp/mysql_temptable.xTHQV4 (deleted)
lrwx------ 1 mysql mysql 64 Apr 17
如果使用以下查询,我有一个巨大的表(>10亿行),并希望选择第n行(例如第1亿行):
SELECT * FROM table ORDER BY indexed_column ASC LIMIT 1 OFFSET 100,000,000,
结果是可以的,但是的性能不是!因为该查询应该扫描100,000,000行,以选择第1亿行,因此在此过程中表将被锁定。
是否有最佳查询来选择MySQL中的第n行?
我们有一个应用程序,它将来自不同来源的文章存储在MySQL表中,并允许用户检索按日期排序的文章。文章总是按源过滤,因此对于客户端的选择,我们总是有
WHERE source_id IN (...,...) ORDER BY date DESC/ASC
我们使用IN,因为用户有许多订阅(有些有数千)。
下面是文章表的架构:
CREATE TABLE `articles` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`source_id` INTEGER(11) UNSIGNED NOT NULL,
`date` DOUBLE
我有一个关于在MySQL服务器上运行的查询的问题(v5.5.50-0+deb8u1 8u 1)。
SELECT 12 - (SELECT qty FROM Table WHERE id = 5213) AS Amount
因此,金额值为12 -8,55000000000000007= 3.4499999999999993。
但是如果我运行这个查询:
SELECT qty FROM Table WHERE id = 5213
它返回8.55,这是记录中所写的正确数字,所以我希望第一个querty返回3.45。
表" table“中的"qty”列是双列。
怎么可能?如何从查询中得
我有一个mysql DELETE查询,其中where子句使用带有IN的主键:
delete from my_table where id in (4, 900, 700);
我收到了死锁错误。我不明白为什么会这样,也不知道如何避免。虽然其他查询正在从同一个表中选择/删除/添加,但没有为这些ID选择任何其他查询。PK id是特定于单个用户的,因此没有其他人使用这些相同的id。我认为使用主键可以防止delete语句锁定其他行。
编辑:引擎为innoDB
我有两个DB表,每个表都包含电子邮件地址
One is mssql with 1.500.000.000 entries
One is mysql with 70.000.000 entries
我现在要检查两个表中有多少个相同的电子邮件地址。即在两个表中存在相同的地址。
哪种方法最快: 1.下载两个数据集作为csv,将其加载到内存中,并在程序代码中进行比较2.使用DB查询来获得重叠的结果集。
如果2更好:建议的SQL查询是什么?
我试图通过查询更新表,查询本身是使用对其他表的查询结果(其中之一是我们正在更新的表)创建的.
但是,当我试图执行查询时,我一直收到一个错误.经过一些研究,我发现我必须用SELECT * FROM ()来封装内部查询.但这似乎没有用..。
我想不出如何用我的MySQL查询绕过这个错误.
这就是我要犯的错误..。
Err 1093 -您不能指定目标表“播放机”用于更新FROM子句
这是我的疑问..。
DELETE FROM players WHERE name='Henry' AND player_group_id IN
(
SELECT id FROM playe