你好夥計,MYSQL價值差異優化
我運行一個非常大的數據庫(ATM像> 5百萬數據集)。我的數據庫存儲自定義生成的數字(它們以及它們的構成方式在這裏並不重要)以及與此相對應的日期。此外,每個產品都存儲一個ID(意味着一個產品可以在我的數據庫中有不同日期的多個條目 - >主鍵被分割)。現在我想要SELECT
那些前兩天得分最大的前10名身份證號碼。目前我嘗試使用JOINS來實現這一點,但是由於我以這種方式獲得了這麼多的數據集,速度很慢。我怎麼能加快整個操作?
SELECT
d1.place,d2.place,d1.ID
FROM
daily
INNER JOIN
daily AS d1 ON d1.date = CURDATE()
INNER JOIN
daily as d2 ON d2.date = DATE_ADD(CURDATE(), INTERVAL -1 DAY)
ORDER BY
d2.code-d1.code LIMIT 10
編輯:這就是我的結構看起來像
CREATE TABLE IF NOT EXISTS `daily` (
`ID` bigint(40) NOT NULL,
`source` char(20) NOT NULL,
`date` date NOT NULL,
`code` int(11) NOT NULL,
`cc` char(2) NOT NULL,
PRIMARY KEY (`ID`,`source`,`date`,`cc`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
多數民衆贊成在Explain
聲明
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE d1 ALL PRIMARY NULL NULL NULL 5150350 Using where; Using temporary; Using filesort
1 SIMPLE d2 ref PRIMARY PRIMARY 8 mytable.d1.ID 52 Using where
見編輯答案 – Mchl