intカラムの最後の桁のインデックスをMySQLで作成することはできますか?私は、クエリ時間を最適化するためのpostIdの最後の数字のインデックスを作成しようとしているint型の列INTインデックスの最後の桁に基づくMySQLインデックス
CREATE TABLE partition_test(
textfiled INT,
cltext TEXT,
reindexedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
indexedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
status TINYINT(2),
postId INT)
PARTITION BY HASH(MOD(postId, 10))
PARTITIONS 10;
の最後の数字に基づいて
このanswerに基づいて、私が作成したパーティション。 postIdでこれを行う方法や単純なインデックスで十分ですか?
いくつかは、試行に失敗した:
CREATE INDEX postLastDigit USING HASH ON partition_test (MOD(postId, 10));
(1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'MOD(postId, 10))' at line 1")
と
CREATE INDEX postLastDigit ON partition_test (MOD(postId, 10));
(1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'MOD(postId, 10))' at line 1")
UPDATE: テーブル以上100M行を有します。
1)
SELECT cltext FROM partition_tables
WHERE postId in (<INT>, <INT>)
AND status IS NOT NULL
2)
SELECT cltext FROM partition_tables
WHERE postId in (<INT>, <INT>)
AND status IS NOT NULL
AND reindexedAt BETWEEN (<DATE>, <DATE>)
MariaDBバージョン:10.1.23-MariaDB-9 + deb9u1
私の目標は、のようなクエリを最適化することです
これは悪い考えです。さらに、本質的に*ランダムなパーティショニングは何も改善しません。サーバーがすべてのパーティションを強制的に検索するため、パフォーマンスが低下します*。 –