1

何らかの理由で、SQL の「where」条件として日付範囲を使用する必要があります。
テーブルに新しいフィールド data_range を追加する必要があります。これは varchar または integer である必要があります。mysql で =integer を使用した方が =varchar よりも高速であることを知りたいですか? そしてそれは明らかですか?

select * from table where date_range = '2013-10-01__2013-10-30' use varchar
select * from table where date_range = 2013100120131030 // use integer
4

2 に答える 2

2

WHERE主な質問は、「節でどちらが速いintvarchar?」です。あなたがここにいるべきものではありません。

まず、値が大きすぎてフィールドintに入れる必要があります。bigint第二に、おそらくどちらも使用したくないでしょうvarcharが、代わりに好むでしょうchar(文字列の長さが一定になることがわかっているため)。現在、これらの変更のいずれかを適用すると、数十万 (または数百万) のレコードに対して一度に数千のクエリを実行しない限り、パフォーマンスへの影響に気付くことはありません (特にテーブルにインデックスを付ける場合)正しく。

では、本題です。2 つの日付があり、それらを 1 つの列にマージしています。これは行うべきではありません。コメントで、Google アナリティクスからこのような値を受け取っていると述べました。ただし、値を 2 つの別個の日付値に分割し、それらを 2 つの別個の列 (両方ともdate型) に格納できる必要があります。

varcharあなたの質問は2つの別々のフォーマットでそれらを示しているので、あなたがどのフォーマットでそれらを受け取っているのかわかりません__. PHP でこれにフラグを立てたので、両方の形式を 2 つの個別の変数に分割する方法を次に示します。

区切り文字付きの文字列 (yyyy-mm-dd も区切るため、非常に簡単になります):

// assuming a string with a __ delimiter
list($firstDate, $secondDate) = explode('__', $originalDate);

yyyymmdd の形式のまま、区切り記号のない文字列/整数:

// assuming a string that has no delimiters:
$firstDate = substr($originalDate, 0, 8);
$secondDate = substr($originalDate, 8);

yyyy-mm-dd 形式を強制する、区切り記号のない文字列/整数:

// assuming an string that has no delimiters but adding them each in
$firstDate = sprintf("%s-%s-%s", substr($originalDate, 0, 4), substr($originalDate, 4, 2), substr($originalDate, 6, 2));
$secondDate = sprintf("%s-%s-%s", substr($originalDate, 8, 4), substr($originalDate, 12, 2), substr($originalDate, 14, 2));

上記の 3 つのメソッドは、codepadで実際に見ることができます。

2 つの別々の変数に 2 つの日付がある場合は、それらをデータベースの 2 つの別々の列に格納できます。データベース クエリが常に「開始」日と「終了」日の両方でクエリを実行する場合は、両方の列を同じインデックスにインデックス化できます。それ以外の場合は、両方を個別にインデックス化できます。ユースケースに関係なく、それらを使用するため、インデックスを追加することは、後の速度/最適化を保証するための重要なステップになります =]

于 2013-10-30T16:03:55.523 に答える
-2

Logically, integer comparisons use fewer bytes and are faster.

That's true, but I've never noticed the difference. This will likely not make a noticeable difference for you, except for the time that it takes you to decide.

于 2013-10-30T02:52:25.690 に答える