MariaDBで外部ライブラリを使って64ビット以上の数値の1ビットの数をカウントする方法

2024-04-02

MariaDBにおけるBIT_COUNT関数と64ビット以上の値

MariaDBのバージョンとBIT_COUNT関数

バージョン処理できる数値の最大ビット数
10.3以前64
10.4以降64 (デフォルト)、bigint型 (最大64ビット)

64ビット以上の数値を処理するには

MariaDB 10.4以降を使用している場合は、BIT_COUNT関数にbigint型 (最大64ビット) の数値を渡すことで、64ビット以上の値を処理することができます。

-- MariaDB 10.4以降

SELECT BIT_COUNT(0b11111111111111111111111111111111); -- 64
SELECT BIT_COUNT(CAST(0b11111111111111111111111111111111 AS BIGINT)); -- 64

-- MariaDB 10.3以前

SELECT BIT_COUNT(0b11111111111111111111111111111111); -- 64
SELECT BIT_COUNT(CAST(0b11111111111111111111111111111111 AS BIGINT)); -- エラー

注意点

  • MariaDB 10.3以前では、64ビット以上の数値を処理しようとすると、エラーが発生します。
  • bigint型 (最大64ビット) の数値は、符号付きです。

補足

  • BIT_COUNT関数は、ビット演算やデータベースのチューニングなど、さまざまな用途で使用できます。
  • MariaDB 10.4以降では、BIT_COUNT関数に加えて、BIT_LENGTH関数やBIT_AND関数などのビット操作関数が拡張されています。



-- MariaDB 10.4以降

-- 64ビット以下の数値

SELECT BIT_COUNT(0b11111111); -- 8
SELECT BIT_COUNT(12345); -- 16

-- 64ビット以上の数値

SELECT BIT_COUNT(0b11111111111111111111111111111111); -- 64
SELECT BIT_COUNT(CAST(0b11111111111111111111111111111111 AS BIGINT)); -- 64

-- ビット演算

SELECT BIT_COUNT(0b11111111 & 0b10101010); -- 4
SELECT BIT_COUNT(0b11111111 | 0b10101010); -- 12

-- データベースのチューニング

SELECT BIT_COUNT(column_name) FROM table_name WHERE column_name > 0; -- 高頻度に出現する値を分析

  • 上記のサンプルコードは、MariaDB 10.4以降で動作します。
  • サンプルコードでは、BIT_COUNT関数を使用して、さまざまな数値の1ビットの数をカウントしています。
  • また、ビット演算やデータベースのチューニングなど、BIT_COUNT関数のさまざまな用途を示しています。

実行方法

  1. MariaDB 10.4以降をインストールします。
  2. サンプルコードをテキストファイルに保存します。
  3. MariaDB クライアントを使用して、テキストファイルを実行します。



64ビット以上の値を処理する他の方法

方法1: ビット演算を使用する

ビット演算を使用して、64ビット以上の数値の1ビットの数をカウントすることができます。

-- 64ビット以下の数値

SELECT (b1 & 0x01) + (b1 >> 1 & 0x01) + ... + (b1 >> 63 & 0x01) AS bit_count
FROM (SELECT 12345 AS b1) AS t;

-- 64ビット以上の数値

SELECT (b1 & 0x01) + (b1 >> 1 & 0x01) + ... + (b1 >> 63 & 0x01) AS bit_count
FROM (SELECT CAST(0b11111111111111111111111111111111 AS BIGINT) AS b1) AS t;

方法2: 自作関数を使用する

64ビット以上の値を処理する自作関数を作成することができます。

DELIMITER //

CREATE FUNCTION bit_count_bigint(value BIGINT) RETURNS INT
BEGIN
  DECLARE bit_count INT;
  DECLARE i INT;

  SET bit_count = 0;

  FOR i := 0 TO 63 DO
    IF (value & (1 << i)) THEN
      SET bit_count = bit_count + 1;
    END IF;
  END FOR;

  RETURN bit_count;
END;
//

DELIMITER ;

SELECT bit_count_bigint(0b11111111111111111111111111111111); -- 64
  • 64ビット以下の数値を処理する場合は、BIT_COUNT関数が最も簡単で効率的な方法です。
  • 64ビット以上の数値を処理する場合は、ビット演算、自作関数、外部ライブラリのいずれかを選択することができます。
  • ビット演算は最も高速な方法ですが、コードが複雑になる可能性があります。
  • 自作関数は柔軟性に優れていますが、ビット演算よりも遅くなる可能性があります。
  • 外部ライブラリは使い方が簡単ですが、パフォーマンスが低下する可能性があります。

mariadb


JSON データから配列を抽出するための 正規表現

このガイドでは、JSON データから配列を抽出するための 正規表現 の使用方法について、MariaDB を使った実践的な例を交えて詳細に解説します。正規表現は、テキスト内における特定のパターンを検索および操作するための強力なツールです。パターンは、個々の文字、文字クラス、メタ文字などを組み合わせて記述されます。...


SQL、Oracle、MariaDBでハッシュを安全に保存する方法

データベースにハッシュを保存する方法はいくつかありますが、最適な方法はデータベースの種類とハッシュの使用目的によって異なります。ここでは、SQL、Oracle、MariaDBにおける一般的なハッシュ保存方法について説明します。ハッシュとは、あるデータ (キー) を別のデータ (値) に変換するアルゴリズムです。ハッシュ関数は、入力されたキーに対して、一意の固定長の出力値 (ハッシュ値) を生成します。ハッシュ値は、元のキーを復元することはできませんが、データの整合性を検証したり、重複を検出したりするために使用できます。...


データベース移行の落とし穴:MySQLからMariaDBへの移行で失敗しない方法

以下では、よくある問題と解決方法をいくつか紹介します。データ型の問題MySQLとMariaDBでは、一部のデータ型が互換性を持っていません。例えば、MySQLの TINYINT 型は、MariaDBでは TINYINT(1) 型として扱われます。これは、符号付きか符号なしかの違いです。...


MySQL: 外部ライブラリを使って中央値を計算する

MySQLには中央値を直接計算する組み込み関数は存在しません。しかし、いくつかの方法で中央値を計算することができます。MySQL 8.0以降では、ウィンドウ関数を使って中央値を計算することができます。この例では、column_name列の中央値をmedianという名前で計算しています。...


分散システムにおけるクエリ最適化の重要性:MariaDBスレーブの例

この問題には、いくつかの潜在的な原因が考えられます。統計情報の違い: 各スレーブは、個別に統計情報を収集します。これらの統計情報が異なる場合、最適な実行プランを選択するために使用される情報も異なる可能性があります。インデックスの使用状況: 各スレーブは、インデックスを異なる方法で使用している可能性があります。これは、スキャンや結合の順序に影響を与える可能性があります。...


SQL SQL SQL Amazon で見る



MariaDBで1844京を超えるレコードを扱う方法

MariaDBのバージョン: MariaDB 10. 2以前では、テーブルあたりの最大レコード数は約42億9496万7295件でした。MariaDB 10. 3以降では、テーブルあたりの最大レコード数は約1844京6744億7370万9551615件に増えました。


PHP で MariaDB のバージョンを取得する方法

例: 10. 5.8この表記において、最初の部分は メジャーバージョン を示します。 メジャーバージョンは、MariaDB の 主要な機能変更 を表します。 メジャーバージョンの数字が大きくなるほど、新しい機能や改良が導入されていることを意味します。


【初心者向け】MariaDB/SQLレコード数取得:3つの基本方法と状況別最適解

COUNT(*) を使用する最も一般的で簡単な方法は、COUNT(*) 関数を使用することです。これは、すべての行をカウントし、テーブル内のレコード数を返します。この方法は、シンプルなクエリでレコード数を取得したい場合に適しています。information_schema


MariaDB 10.4.14-MariaDB のバージョンを確認する方法

MariaDB 10. 4.14-MariaDB には、バージョン情報を確認するためのコマンドラインツールがいくつか用意されています。mariadb-version コマンドは、MariaDB サーバーのバージョン情報を表示するコマンドです。このコマンドを実行するには、ターミナルまたはコマンドプロンプトを開き、以下のコマンドを入力します。