考虑到在连接到ODBC的客户端应用程序中有一长串键,那么在MySql中处理许多行的好方法是什么?
注意:我的经验主要是Server,所以我知道一点,只是不知道具体的MySQL。
任务是从9个表中删除一些行,但我可能有5000对以上的密钥对。
首先,我使用了一种简单的方法,可以循环遍历所有键,并针对每个表为每个键提交一条语句,例如:
DELETE FROM Table WHERE Key1 = 123 AND Key2 = 567 -- and 8 more tables
DELETE FROM Table WHERE Key1 = 124 AND Key2 = 568 -- and 8 mor
我对mysql不是很了解。所以如果这是个愚蠢的问题请原谅。
我今天接到了一个来自我的DBA的电话,我的应用程序创建的临时表数量激增。
但我没有显式地创建任何临时表。
在故障排除后,我们发现每次在子查询中使用文本colomn时,都会创建一个临时表。
作为开发人员,使用子查询和文本列创建临时表使我感到困惑。
我的问题是,作为开发人员,我如何理解查询何时会创建临时表(在后台)。
我做了一些搜索,发现我可以做一些类似的事情
show GLOBAL status like 'created_tmp_disk_tables'
但它告诉我什么呢?如何知道我的查询是否导致了临时表。
我有MySQL5.5,我创建了一个存储过程
CREATE DEFINER=`root`@`%` PROCEDURE `refresh_mobileTemp`()
BEGIN
DROP TABLE IF EXISTS mobileTemp;
CREATE TEMPORARY TABLE mobileTemp AS
(SELECT distinct
...
);
END
正在运行
call refresh_mobileTemp();
创建临时表。
然后我删除了临时表并创建了一个事件:
CREATE EVENT `schedulerMobileTemp`
ON SCHEDULE ev
我有一个MySQL存储例程,在这里我想使用一个临时数据表来存储中间结果。为了避免创建一个“正常”表,我想使用一个内存中的表,当例程执行完成后,这个表就会消失。我是一个MySQL新手,但我想这是个好办法:
DROP TABLE IF EXISTS MyInMemoryTable;
CREATE TABLE MyInMemoryTable ( numberField int ) ENGINE = MEMORY;
...
DROP TABLE IF EXISTS MyInMemoryTable;
我的例程只适用于一个用户,但是如果多个用户同时运行例程,我会感到紧张吗?
MyInMemoryTable
我在mysql的datadir中找到了一些旧文件:
-rw-rw---- 1 mysql mysql 0 2012-10-09 09:39 #sql_263c_0.MYD
-rw-rw---- 1 mysql mysql 1.0K 2012-10-09 09:39 #sql_263c_0.MYI
-rw-rw---- 1 mysql mysql 0 2012-10-09 09:40 #sql_263c_1.MYD
-rw-rw---- 1 mysql mysql 1.0K 2012-10-09 09:40 #sql_263c_1.MYI
-rw-rw---- 1