鍍金池/ 問答/PHP  數(shù)據(jù)庫  HTML/ 根據(jù)年月分表,相關(guān)查詢問題

根據(jù)年月分表,相關(guān)查詢問題

1.例如一個表名y_capture_2018_01,數(shù)據(jù)表名是根據(jù)年月來動態(tài)生成的(y_capture_2018_02);
2.每個表里面都有自增主鍵id,還有個created_at(where條件)字段;
3.比如我現(xiàn)在要查詢2017-09-16到2018-01-02里面的數(shù)據(jù)符合條件的數(shù)據(jù)(先要找到表,然后查詢,還要分頁,還要效率高),這里面可能包含查全表;
4.這個好像也不太適合用laravel模型寫(表名是動態(tài)的),如果用模型寫出來查詢最好;
5.查出來的id可能會有重復(fù)數(shù)據(jù)該怎么解決,重命名嗎?
6.我該怎么寫sql語句和分頁查詢,我看過有人用union,那時間跨度大union會不會太慢;
7.表引擎是InnoDB的,merge不可行;
8.有什么好的思路可以指導(dǎo)一下我。

回答
編輯回答
清夢
8.有什么好的思路可以指導(dǎo)一下我。

不要用 MySQL 。換 PostgreSql ,自帶表分區(qū)功能。

2018年2月10日 10:33
編輯回答
瘋浪

1.根據(jù)你的描述,我理解的是你想實現(xiàn)一個根據(jù)你選擇的日期,還有條件返回相應(yīng)的數(shù)據(jù)。 2.解決方案:可以把所有數(shù)據(jù)都在一個表里邊,然后根據(jù)時間字段 + 你添加的其他條件查詢就可以實現(xiàn)。 加索引速度會快很多。(如果理解有誤,請忽略回答)

2017年8月31日 23:56
編輯回答
氕氘氚

之前的項目遇到過類似的,你參考一下

因為你的表結(jié)構(gòu)已經(jīng)是這樣了,就不提供分區(qū)的方法了
  • 自己用程序?qū)崿F(xiàn)order by、limit、group by等操作,取出來結(jié)果后由程序完成相應(yīng)操作。但是這個開發(fā)成本很高,相當(dāng)于自己實現(xiàn)了數(shù)據(jù)庫的一些功能。如果還有join什么的的操作那就更苦逼了。所以量力而為吧
  • 利用中間數(shù)據(jù)庫(表)??梢詫⒏鱾€表的數(shù)據(jù)查出來之后統(tǒng)一再插入到一個臨時表??梢钥紤]用sqlite去完成,當(dāng)然mysql也是可以的,具體看你們情況。匯總過后就相當(dāng)于在一張表操作了。這種方法的好處是特別容易操作,即使遇到不在同一臺服務(wù)器的情況下也能解決。
  • 終極的辦法就是改變架構(gòu)了,或者改變一下分表的方式
2017年9月6日 13:23
編輯回答
護她命

我用thinkphp5寫的,給你參考下,laravel應(yīng)該同理。https://www.zkii.net/tech/php...

2018年5月29日 12:45
編輯回答
孤巷

首先你的設(shè)計模型方面可能有點問題。像上面那那位仁兄說的可以使用分區(qū)表,如果你一定要庫內(nèi)分表的話,你的規(guī)則設(shè)計還是有點問題的。
什么你都自己寫,會給自己挖下無數(shù)的坑。建議參考下開源的分庫分表組件mycat 或者sharding-jdbc兩個不同方式的分庫分表組件

歡迎加Q群討論交流Java技術(shù):696883318

2017年2月9日 03:51
編輯回答
情殺

首先你這個分表的設(shè)計就不對,如果怕數(shù)據(jù)量大,用mysql自帶的分區(qū)就行了,mysql自帶的分區(qū)是通過數(shù)據(jù)庫底層分區(qū),不會影響代碼邏輯,修改代碼的成本為0。不建議自己去創(chuàng)建一套建表邏輯。

2017年3月8日 04:16