2011-03-29 90 views
0

因此,我有這個數據庫(幾乎沒有關係,因爲它沒有主鍵,唯一字段,外鍵等),每次我都重新啓動C客戶端它這個查詢:在沒有索引/主鍵/唯一字段的MySQL中提高查詢速度

select * from table where table.id1 = another_table.id1 and table.id2 > another_table.id2 limit 1;

隨着第一臺9個百萬行,並在第二個800,它永遠完成:/

我不是一個SQL開發人員,所以我在這個領域的知識非常有限。當然,這個問題聽起來可能很愚蠢,但現在我處於一個死衚衕......

回答

0

你不能強制數據庫運行得更快,除非你給它一些東西來處理 - 意思是說,你需要添加索引以使其更快運行。一旦你做到了,它將會瘋狂地變得更快。

+0

添加索引可能會破壞插入性能,我們需要在運行時大量執行此操作。 – 2011-03-29 14:51:11

+0

添加索引*可能*殺死插入性能。不明顯增加他們* definitly *殺死查詢性能。對不起,沒有什麼不可思議的選項可以打開以提高查詢性能。只有索引;)。 – 2011-03-29 15:02:49

+0

這是真的,索引_may_肯定是慢插入。這聽起來像是一個給予和承擔;如果您需要最初的啓動速度很快,那麼索引幾乎是唯一的方式去做這樣的查詢。如果您的插入性能受阻,您需要查看更改服務器配置或添加硬件。例如,這裏有一篇關於[加速MySQL]的文章(http://www.experts-exchange.com/Database/MySQL/A_1250-3-Ways-to-Speed-Up-MySQL.html)。 – Kelly 2011-03-29 15:08:46

0

有什麼理由沒有索引,pk等?因爲這正是缺少在這裏獲得體面的表現。另外,another_table.id1和another_table.id2是否與表或固定值結合(前一種情況:sql如何顯示?)。

0

通常索引是爲了提高這類查詢的性能,所以如果你認爲索引可能會導致你的插入性能下降,也許一個選項是讓索引定義,但是禁用並且在select完成後啓用索引,像這樣。

ALTER TABLE table ENABLE KEYS; 
ALTER TABLE other_table ENABLE KEYS; 
select * from table where table.id1 = another_table.id1 and table.id2 > another_table.id2 limit 1; 
ALTER TABLE table DISABLE KEYS; 
ALTER TABLE other_table DISABLE KEYS;