所以我一直在尋找一個解決方案和閱讀書籍,並沒有能夠弄清楚,問題很簡單,我有2個表格。在一張桌子上,我有兩個字段:優化特定查詢mysql
table_1:「染色體」和「位置」都是整數。
table_2:「染色體」「開始」和「結束」,都是整數。
我想要一個查詢,該查詢將table_1中位於table_2開始和結束之間的所有行都返回給我。查詢看起來是這樣的:
SELECT
table_1 . *
FROM
table_1,
table_2
WHERE
table_1.chromosome = table_2.chromosome
AND table_1.position > table_2.start
AND table_1.position < table_1.end;
所以此查詢工作正常,但我的表都是幾百萬行(7092713)和(215909)respectvely的。我索引染色體,pos和染色體,開始,結束。奇怪的部分是,如果我逐個執行查詢(perl DBI,爲table_2的每行執行一條語句),則運行速度會快得多。不知道我在哪裏搞砸了。 任何幫助,將不勝感激。
豪爾赫景山
嗨,首先,感謝您的回覆!我已經通過位置和染色體以及染色體開始結束(開始總是低於結束,並且這是我的理解,如果我以這種方式編制索引,我可以單獨使用任何最左側的索引),我只用了*對於這個例子,但實際上正如你所說我只需要pos和染色體,所以我已經在使用你的消化:) –
我添加了一些關於'SELECT DISTINCT'的內容。 –
嘿,好的,所以我嘗試了,仍然需要永遠運行,我的數據是唯一的,沒有2個單打相同的位置,並且數據不重疊,另一個奇怪的是,如果我從表中進行1個查詢2,它的速度非常快,我的意思是,我可以保持這種方式,直接用mysql(但是thnx! –