我想捕捉 X 行,因此,我设置了LIMIT X; 但是我怎样才能同时计算总行数呢?
目前,我使用两个单独的查询来这样做
SELECT COUNT(*) FROM col WHERE CLAUSE
SELECT * FROM col WHERE CLAUSE LIMIT X
Run Code Online (Sandbox Code Playgroud)
有没有办法在一个查询中做到这一点?
编辑:输出应该是col单元格和行数。实际上,选择col单元格后,它应该只走表格以进行计数。
我知道不可能合并这两个查询,因为第一个返回 1 行,但第二个返回 X 行。我很好奇 mysql 中是否有一个函数可以在LIMIT.
有一个表“上下文”。有一个自动增量 ID“context_id”。我正在使用序列来检索下一个值。
SELECT nextval('context_context_id_seq')
Run Code Online (Sandbox Code Playgroud)
结果是:1, 2, 3,...20....
但是“上下文”表中有 24780 行
如何获得下一个值 (24781)?
我需要在 INSERT 语句中使用它
下面是我的会员表的一个例子。在电子邮件字段中有一些记录具有多个值。我只想选择那些具有多个电子邮件值的记录:
ID LASTNAME FIRSTNAME EMAIL
567 Jones Carol carolj@gmail.com
567 Jones Carol caroljones@aol.com
678 Black Ted tedblack@gmail.com
908 Roberts Cole coleroberts@gmail.com
908 Roberts Cole coler@aol.com
908 Roberts Cole colerobersc@hotmail.com
Run Code Online (Sandbox Code Playgroud)
我希望结果是:
567 Jones Carol carolj@gmail.com
567 Jones Carol caroljones@aol.com
908 Roberts Cole coleroberts@gmail.com
908 Roberts Cole coler@aol.com
908 Roberts Cole colerobersc@hotmail.com
Run Code Online (Sandbox Code Playgroud)
请注意,缺少 Ted Black,因为他只有一个电子邮件地址条目。
我应该澄清一下,我的会员表有 4 列以上。电话和地址等还有额外的列。一个成员可能有多个条目,因为他/她有多个电话号码或地址。我只想捕获那些拥有多个电子邮件地址的人。
这是数据库清理的一部分,将添加主键。我应该进一步澄清,有些人可能有多个具有相同电子邮件地址的条目。在此阶段,我不想捕获具有相同电子邮件地址的多个条目,而只想捕获具有不同电子邮件地址的多个条目的那些条目。
我有一个包含近 2300 万条记录的 MySQL 数据库表。这个表没有主键,因为没有什么是唯一的。它有 2 列,均已编入索引。下面是它的结构:

下面是它的一些数据:

现在,我运行了一个简单的查询:
SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001'
Run Code Online (Sandbox Code Playgroud)
不幸的是,这花了超过 5 秒的时间来检索数据并将它们显示给我。我未来的表将有1500亿条记录,所以这个时间非常非常高。
我运行Explain命令看看发生了什么。结果如下。

然后我使用以下命令运行配置文件。
SET profiling=1;
SELECT `indexVal` FROM `key_word` WHERE `hashed_word` = '001';
SHOW profile;
Run Code Online (Sandbox Code Playgroud)
下面是分析的结果:

以下是有关我的表的更多信息:

那么,为什么这需要这么长时间?他们也被索引了!将来,我必须运行很多LIKE命令,所以这花费了太多时间。出了什么问题?
如何列出当前数据库中的所有表,以及该表的行数。
换句话说,你能想出一个查询来在 mysql 中提出这样的事情吗?
+------------------------++------------------------+
| Tables_in_database | Number of rows |
+------------------------++------------------------+
| database 1 | 1000 |
| database 2 | 1500 |
+------------------------++------------------------+
Run Code Online (Sandbox Code Playgroud)
欢迎使用不同的方法。
我只是好奇。
假设您有一个包含 100 万条记录/行的表。
select order_value from store.orders
Run Code Online (Sandbox Code Playgroud)
那个表有1个字段、2个字段还是100个字段,在实际查询的时候有区别吗?我的意思是“order_value”以外的所有字段。
现在我正在将数据推送到数据仓库。有时我将字段转储到表中,“将来可能会在某天使用” - 但现在不会被任何东西查询。这些“无关”字段是否会直接或间接影响不包含它们的选择语句(不* 我的意思是)?
我只是想知道 SQL 语句INSERT INTO TABLE1 SELECT * FROM TABLE2,会像批量插入一样工作吗?
如果没有,有没有办法在插入记录时排除索引。进程在一次执行中插入 1.5 亿条数据。
我们计划创建阶段表(不会有任何索引Table1),然后将其从阶段表转移到目标表(会有索引Table2)
我们不是在从过程中创建平面文件的情况。
但是当我们将数据从Table1(未编入索引)传输到Table2(编入索引)时,我们正在寻找可以加快处理速度的方法。
任何方式使用BulkInsert自Table1到Table2?
所述的PostgreSQL 9.4文档指出添加NOWAIT选项将SELECT FOR UPDATE当行不能被锁定时产生一个错误的装置:
要防止操作等待其他事务提交,请使用 NOWAIT 选项。使用 NOWAIT,如果无法立即锁定所选行,该语句将报告错误,而不是等待。
那究竟是什么错误?
由于这是一个可接受的条件,我希望我的 Java 代码检查此类预期错误,然后解决它。
我在摆弄VACUUM并注意到一些意想不到的行为,其中SELECT从表中ing 行似乎减少了VACUUM之后必须做的工作。
注意:autovacuum 被禁用
CREATE TABLE numbers (num bigint);
ALTER TABLE numbers SET (
autovacuum_enabled = 'f',
toast.autovacuum_enabled = 'f'
);
INSERT INTO numbers SELECT generate_series(1, 5000);
Run Code Online (Sandbox Code Playgroud)
现在我们对所有行运行更新,
UPDATE numbers SET num = 0;
Run Code Online (Sandbox Code Playgroud)
当我们跑步时,VACUUM (VERBOSE) numbers;我们得到,
INFO: vacuuming "public.numbers"
INFO: "numbers": removed 5000 row versions in 23 pages
INFO: "numbers": found 5000 removable, 5000 nonremovable row versions in 45 out of 45 pages
DETAIL: 0 dead row versions …Run Code Online (Sandbox Code Playgroud) 如果我想计算一列并在多于 1 列中使用结果,如何在不进行两次计算的情况下执行此操作?
例子:
SELECT LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com' as EMail
,hashbytes('SHA1', LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com') as HashedEmail
FROM sometable
Run Code Online (Sandbox Code Playgroud)
如何避免在不使用多个选择的情况下写两次?
select ×10
count ×3
mysql ×3
postgresql ×3
sql-server ×3
innodb ×2
insert ×2
performance ×2
bulk-insert ×1
distinct ×1
locking ×1
mysql-5.5 ×1
vacuum ×1