0

私はmysqlのパーティションテーブルに2つの問題があります。YEARでテーブルをパーティション化し、MYSQLでビューを作成

私のテーブルは、私がでpartioningを適用するために、テーブルを変更する3つの列

  1. id_rowのINT NOT NULL AUTO_INCREMENT
  2. name_element VARCHAR

NULL NOT(45)NULL

  • date_element DATETIMEを持っていますYEAR(date_element)の範囲は次のとおりです。

    ALTER TABLE `orderslist` 
    PARTITION BY RANGE(YEAR(date_element)) 
    PARTITIONS 5( 
    PARTITION part_2013 VALUES LESS THAN (2014), 
    PARTITION part_2014 VALUES LESS THAN (2015), 
    PARTITION part_2015 VALUES LESS THAN (2016), 
    PARTITION part_2016 VALUES LESS THAN (2017), 
    PARTITION part_2017 VALUES LESS THAN (MAXVALUE)); 
    

    が、私は、クエリがすべてのパーティションとpart_2015、part_2016とpart_2017だけではないを使用しています

    EXPLAIN PARTITIONS SELECT * FROM ordersList WHERE YEAR(date_element) > '2015'; 
    

    を使用しています。

    代わりに私が

    EXPLAIN PARTITIONS SELECT * FROM ordersList WHERE date_element > '2015-10-10 10:00:00'; 
    

    を使用している場合、それは動作します。

    だから私の質問は以下のとおりです。

    1. どのように私は、最初のクエリの作業を行うことができますか?
    2. このテーブルからパーティションを失うことなくマテリアライズドビューを作成する方法はありますか?

  • +0

    私は、MySQLが最初の 'WHERE'節の関数呼び出しが分割基準に一致することを認識するほどスマートではないと思われます。これは、クエリの型が列のインデックスを使用できないのと同じ理由です。 – Barmar

    答えて

    0

    MySQLのPARTITIONingはかなり気難しいです、ありがとうございました。 YEAR()が認識されているのに対し、認識されるのはおそらく唯一の表現であり、>はダムではありません。

    YEARでパーティショニングする理由は何ですか?それは役に立たないかもしれません。

    あなたの質問があなたの説明どおりであれば。非パーティション表の適切な索引は、同じ速さで実行される可能性が高くなります。

    最も重要なものを分析できるように、重要なクエリとSHOW CREATE TABLE(パーティションの有無にかかわらず)を提供してください。

    また、PARTITIONS 5とは何ですか?

    +0

    この投稿はこの質問に答える試みのようには見えません。ここのすべての投稿は、この質問に答えるための明示的な試みであると予想されます。あなたが批判を持っているか、質問または別の回答の明確化が必要な場合は、そのすぐ下に(このような)[コメントを投稿する](// stackoverflow.com/help/privileges/comment)することができます。この回答を削除して、コメントまたは新しい質問を作成してください。参照してください:[質問をする、答えを得る、混乱を招かない](// stackoverflow.com/tour) –

    +0

    私の最初の段落では、「YEAR」はパーティショニングでは機能しません。 Para#2、3、4は、「この仕事をどうやって作るのか」という書かれていない質問に答えようとしています。 –

    関連する問題