0

約 100000 エントリ (サイズ: 2319.58MB; 平均: 24KB 前の行) を持つ MySQL テーブルで多かれ少なかれ単純なクエリを実行しようとしています。

これはクエリです:

SELECT 
  n0_.id AS id0, 
  n0_.sentTime AS sentTime1, 
  n0_.deliveredTime AS deliveredTime2, 
  n0_.queuedTime AS queuedTime3, 
  n0_.message AS message4, 
  n0_.failReason AS failReason5, 
  n0_.targetNumber AS targetNumber6, 
  n0_.sid AS sid7, 
  n0_.targetNumber AS targetNumber8, 
  n0_.sid AS sid9, 
  n0_.subject AS subject10, 
  n0_.targetAddress AS targetAddress11, 
  n0_.priority AS priority12, 
  n0_.targetUrl AS targetUrl13, 
  n0_.discr AS discr14, 
  n0_.notification_state_id AS notification_state_id15, 
  n0_.user_id AS user_id16 
FROM 
  notifications n0_ 
  INNER JOIN notification_states n1_ ON n0_.notification_state_id = n1_.id 
WHERE 
  n0_.discr IN (
    'twilioCallNotification', 'twilioSMSNotification', 
    'emailNotification', 'httpNotification'
  ) 
ORDER BY 
  n0_.id desc 
LIMIT 
  25 OFFSET 0

100 ~ 200 秒のクエリ。

これは、テーブルの作成ステートメントです。

CREATE TABLE notifications (
    id INT AUTO_INCREMENT NOT NULL,
    notification_state_id INT DEFAULT NULL,
    user_id INT DEFAULT NULL,
    sentTime DATETIME DEFAULT NULL,
    deliveredTime DATETIME DEFAULT NULL,
    queuedTime DATETIME NOT NULL,
    message LONGTEXT NOT NULL,
    failReason LONGTEXT DEFAULT NULL,
    discr VARCHAR(255) NOT NULL,
    targetNumber VARCHAR(1024) DEFAULT NULL,
    sid VARCHAR(34) DEFAULT NULL,
    subject VARCHAR(1024) DEFAULT NULL,
    targetAddress VARCHAR(1024) DEFAULT NULL,
    priority INT DEFAULT NULL,
    targetUrl VARCHAR(1024) DEFAULT NULL,
    INDEX IDX_6000B0D350C80464 (notification_state_id),
    INDEX IDX_6000B0D3A76ED395 (user_id),
    PRIMARY KEY (id)
)  DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB;

ALTER TABLE notifications ADD CONSTRAINT FK_6000B0D350C80464 FOREIGN KEY (notification_state_id) REFERENCES notification_states (id) ON DELETE CASCADE;
ALTER TABLE notifications ADD CONSTRAINT FK_6000B0D3A76ED395 FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE;

これらのクエリは Doctrine2 (ORM) によって作成されます。Debian 6.0.7 を実行している仮想マシン (1GB RAM、シングル コア) で MySQL 5.5.31 を使用しています。クエリのパフォーマンスが非常に悪いのはなぜですか? データベースの設計に問題があるのでしょうか、それとも vbox が小さすぎてこの量のデータを処理できないのでしょうか?

4

2 に答える 2

1

notifications.discr でフィルタリングしていますが、インデックスが作成されていないようです。それにインデックスを追加しようとしましたか?

于 2013-06-25T13:10:12.610 に答える