我在MYSQL兩個表,其中表2中包含的序列號範圍(唯一的)與17位(VARCHAR 17)和table1的快速搜索與限制包含串行值(相同的格式範圍) 例如:MYSQL - 結果在範圍
table 1:
serial_id seial
1 12345678123456799
table 2:
range id date start end
1 2012-01-01 12345678123456789 12345678123456999
2 2012-01-01 12345678123457000 12345678123457099
3 2012-01-01 12345678123457100 12345678123457199
我想找到每個序列屬於可以使用的後援簡單的查詢範圍IDS是:
select *
from table1,table2
where table1.serial between table2.start and table2.end
但我想優化它與以下事實跑得更快: 連續劇和範圍是獨特的,所以每個串行可能屬於,且只有一個範圍。所以當一個範圍包含序列時,沒有必要搜索其他範圍。 每個範圍的前11位數字是相同的。例如,一個範圍可以從12345678120000000到12345678129999999. 連續和範圍按日期排序,並且更有可能在早期日期中找到範圍。連續出版物約有600萬條記錄,範圍約爲100000條記錄。
更好的查詢任何想法?
你能告訴我們你從這些表中真正的查詢嗎?我問這個問題是因爲你的查詢返回6m記錄,而且它在現實世界中是無用的。這將使我們能夠提供更好的答案。 –
@ Msf-vpt:我的真實查詢寫在上面。我銷售了具有序列號的產品批次範圍。我的範圍是批量出售,我想在銷售批次中搜索使用的批次。此查詢後,我可以找到未使用的連續,從銷售到使用,更快的賣家,和更多的信息延遲。 – user3833757
提供創建所有相關表格和的解釋結果表的語句。並且不要使用邪惡的'SELECT *'。 – Strawberry