Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要关于MYSQL查询优化的建议吗_Mysql_Join_Query Optimization - Fatal编程技术网

需要关于MYSQL查询优化的建议吗

需要关于MYSQL查询优化的建议吗,mysql,join,query-optimization,Mysql,Join,Query Optimization,对上述查询可能进行哪些优化。 表1包含500000多行,表2和表3也可以包含100000多行 根据对特定玩家和游戏的查询,table1可以有超过100000行 上面的查询是否适用于大型表,还是应该将查询拆分为多个查询 使用NDB发动机 请建议我可能的优化 谢谢, Shiv请参见上面的评论,但是,猜测一下,(项目id、用户id、类型、状态)上的索引可能会有所帮助。请发布表1、表2和表3的CREATE语句。一个优化是将tb1.status和tb1.type更改为整数。整数比较比字符串比较快。tb1.

对上述查询可能进行哪些优化。 表1包含500000多行,表2和表3也可以包含100000多行

根据对特定玩家和游戏的查询,table1可以有超过100000行

上面的查询是否适用于大型表,还是应该将查询拆分为多个查询

使用NDB发动机

请建议我可能的优化

谢谢,
Shiv

请参见上面的评论,但是,猜测一下,(项目id、用户id、类型、状态)上的索引可能会有所帮助。

请发布表1、表2和表3的CREATE语句。一个优化是将tb1.status和tb1.type更改为整数。整数比较比字符串比较快。tb1.status和tb1.type都是
EXPLAIN
的输出,以及所添加的table1、table2和table3的table structurecreate语句。
SELECT `tb1`.`id` 
FROM `table1` as tb1
INNER JOIN `table2` as tb2 ON tb1.id = tb2.id
INNER JOIN `table3` as tb3 ON tb1.id = tb3.id 
WHERE (tb1.item_id = '1') 
AND (tb1.user_id = '20') 
AND (tb1.type IN ('UPDATE1','UPDATE2','UPDATE3')) 
AND (tb1.status = 'DELIVERED') 
ORDER BY tb1.date DESC 
LIMIT 100


CREATE TABLE `table1` (
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `user_id` INT(11) UNSIGNED NOT NULL,
    `item_id` INT(11) UNSIGNED NULL DEFAULT NULL,
    `source` ENUM('CPAS','UNIQUE_KEY','BILLING_PARTNER','GAME','MERCURY') NOT NULL,
    `date` DATETIME NOT NULL,
    `status` ENUM('PENDING','DELIVERED','FAILED','REFUNDED') NOT NULL,
    `source_transaction_id` VARCHAR(127) NULL DEFAULT NULL,
    `type` ENUM('UPDATE1','UPDATE2','UPDATE3','UPDATE4') NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
);


CREATE TABLE `table2` (
    `id_p` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `id` INT(11) UNSIGNED NOT NULL,
    `amount` DECIMAL(18,2) NOT NULL,
    `old_balance` DECIMAL(18,2) NULL DEFAULT NULL,
    `description` VARCHAR(255) NULL DEFAULT NULL,
    `date` DATETIME NULL DEFAULT NULL,
    `wallet_currency_id` INT(11) NULL DEFAULT NULL,
    `wallet_currency_code` VARCHAR(50) NULL DEFAULT NULL,
    `wallet_currency_name` VARCHAR(100) NULL DEFAULT NULL,
    `type` ENUM('GAIN','SPENT') NULL DEFAULT NULL,
    PRIMARY KEY (`id_p`),
    INDEX `id` (`id`)
)


CREATE TABLE `table3` (
    `id_p` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `id` INT(11) UNSIGNED NOT NULL,
    `amount` DECIMAL(18,2) NOT NULL,
    `old_balance` DECIMAL(18,2) NULL DEFAULT NULL,
    `description` VARCHAR(255) NULL DEFAULT NULL,
    `date` DATETIME NULL DEFAULT NULL,
    `wallet_currency_id` INT(11) NULL DEFAULT NULL,
    `wallet_currency_code` VARCHAR(50) NULL DEFAULT NULL,
    `wallet_currency_name` VARCHAR(100) NULL DEFAULT NULL,
    `type` ENUM('GAIN','SPENT') NULL DEFAULT NULL,
    PRIMARY KEY (`id_p`),
    INDEX `id` (`id`)
)