MYSQL 查询卡在发送状态

标签 mysql optimization

我的 mysql 查询在发送数据阶段挂起。分析慢查询日志时

Rows_sent: 176975081
Rows_examined: 408406766

这些行数大于表中存在的行数。

这是查询

  select  md.Event_id,db.Listing_ID,db.original_date,
  DATE_FORMAT(ed.event_date, '%m-%d-%Y') AS 'EventDate',
  datediff(ed.event_date,db.original_date),
  zn.zonename,
  sn.sectionname,
  rn.Row_Name,
  db.original_price,
  db.last_date,
  db.last_price,
  (1 - (original_price/Last_Price)) as 'PercentChange'


  from market_data as md

  inner join id_result as db

  on db.id=md.id
  left join 
  zonename zn ON md.zn_id = zn.zoneId
  inner JOIN
  rowname rn ON md.RN_ID = rn.RN_ID
  inner JOIN
  sectionname sn ON md.SN_ID = sn.SN_ID
  inner JOIN
  event_data ed ON md.Event_id = ed.Event_id
  where md.dirtyTicketInd=0

这是表格结构

'CREATE TABLE `id_result` (
`id` int(11) NOT NULL,
`listing_id` int(20) DEFAULT NULL,
 `original_date` date DEFAULT NULL,
 `original_price` decimal(10,2) DEFAULT NULL,
`last_date` date DEFAULT NULL,
`last_price` decimal(10,2) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `listing_id` (`listing_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1'


'CREATE TABLE `market_data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `currentPrice` varchar(10) NOT NULL DEFAULT ''0'',
 `SN_ID` int(11) NOT NULL,
 `quantity` tinyint(2) NOT NULL DEFAULT ''0'',
 `seatNumbers` varchar(60) NOT NULL DEFAULT ''0'',
 `ZN_ID` int(11) NOT NULL,
 `listingAttributeList` varchar(15) NOT NULL DEFAULT ''0'',
 `listingAttributeCategoryList` varchar(15) NOT NULL DEFAULT ''0'',
 `deliveryTypeList` varchar(15) NOT NULL DEFAULT ''0'',
 `ticketClass` varchar(15) NOT NULL DEFAULT ''0'',
 `dirtyTicketInd` tinyint(4) NOT NULL DEFAULT ''0'',
 `splitOption` tinyint(2) NOT NULL DEFAULT ''0'',
 `ticketSplit` tinyint(3) NOT NULL DEFAULT ''0'',
  `splitVector` varchar(40) NOT NULL DEFAULT ''0'',
  `sellerOwnInd` tinyint(3) NOT NULL DEFAULT ''0'',
  `faceValue` varchar(25) NOT NULL DEFAULT ''0'',
  `serviceFee` varchar(15) NOT NULL DEFAULT ''0'',
  `deliveryFee` varchar(12) NOT NULL DEFAULT ''0'',
  `totalCost` varchar(25) NOT NULL DEFAULT ''0'',
  `score` decimal(12,7) NOT NULL DEFAULT ''0.0000000'',
  `seller_price` decimal(10,5) NOT NULL DEFAULT ''0.00000'',
  `Event_id` int(11) DEFAULT NULL,
  `RN_ID` int(11) NOT NULL,
  `SSN_ID` int(11) NOT NULL,
  `LI_ID` int(11) NOT NULL,
  `TS_ID` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `SSN_ID` (`SSN_ID`),
  KEY `SN_ID` (`SN_ID`),
  KEY `ZN_ID` (`ZN_ID`),
  KEY `event_id` (`Event_id`),
  KEY `ts_id` (`TS_ID`),
  KEY `LI_ID` (`LI_ID`)
  ) ENGINE=MyISAM AUTO_INCREMENT=218909923 DEFAULT CHARSET=utf16'

这是explain Plan

最佳答案

您有一个JOIN。它需要“检查”两个表中的行,因此计数很高。而且,由于您需要行的组合,因此“已发送”比任一表都大。

(不相关的注释...)

utf16?我想我没有听说过有人使用它。连接字符串时要小心,尤其是当它们具有不同的字符集时。

VARCHARs 的费用和成本?很难进行算术或排序。

关于MYSQL 查询卡在发送状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35185471/

相关文章:

mysql - 有没有办法忽略 INSERT 中不存在的列?

javascript - 使用 Angular JS 从运行 MySQL 的 PHP 服务器获取数据时出错

mysql - 尝试根据事件阈值找出每月用户流失的 SQL 查询

optimization - 通过 XLS 操作提高性能

php - 检查不同服务器加载时间慢的原因

c++ - g++ 编译器 : optimization flag adds warning message

mysql - 无法在 mac osx 中使用终端连接到 mysql

php - 使用 PHP 在 MySQL 中的多个查询中进行错误检测

jquery - 通过每次匹配时删除 td 来优化算法

apache-spark - 我应该避免在数据集/数据帧中使用 groupby() 吗?