<code>**log表结构如下** id int(10) primary key #主键 ip varchar(32) #ip time int(10) #时间 channel varchar(128) #渠道id 普通索引 status int(10) #状态标识 </code>
channel字段为几个渠道号channel01,channel02...channel20
status为不同的状态标识 比如1代表打开次数,2代表关闭次数等
需求是:
统计不同渠道 不同状态 每天的总ip数量
统计不同渠道 不同状态 每天的去重ip数量
统计不同渠道 不同状态 每天的新增ip数量(当天ip,且当天之前数据库中不存在的ip)
下面为统计渠道channel01,状态status=1的各项数量
目前的实现方法是:
比如2015-11-11当天的数量
先用php算出2015-11-11的凌晨时间戳$begin和2015-11-12的凌晨时间戳$end
<code>**A-- 当天ip总数 $total** SELECT COUNT(*) FROM log WHERE time>={$begin} AND time={$begin} AND time={$begin} AND time</code>
现在表中一共有52万条数据,每天新增大概3万条数据,去重后的也有2万多,在执行第四步(语句D)的时候执行时间为3秒左右
请问有没有什么办法可以优化这个sql语句,或者有没有其它的什么方法实现这个需求?
回复内容:
<code>**log表结构如下** id int(10) primary key #主键 ip varchar(32) #ip time int(10) #时间 channel varchar(128) #渠道id 普通索引 status int(10) #状态标识 </code>
channel字段为几个渠道号channel01,channel02...channel20
status为不同的状态标识 比如1代表打开次数,2代表关闭次数等
需求是:
统计不同渠道 不同状态 每天的总ip数量
统计不同渠道 不同状态 每天的去重ip数量
统计不同渠道 不同状态 每天的新增ip数量(当天ip,且当天之前数据库中不存在的ip)
下面为统计渠道channel01,状态status=1的各项数量
目前的实现方法是:
比如2015-11-11当天的数量
先用php算出2015-11-11的凌晨时间戳$begin和2015-11-12的凌晨时间戳$end
<code>**A-- 当天ip总数 $total** SELECT COUNT(*) FROM log WHERE time>={$begin} AND time={$begin} AND time={$begin} AND time</code>
现在表中一共有52万条数据,每天新增大概3万条数据,去重后的也有2万多,在执行第四步(语句D)的时候执行时间为3秒左右
请问有没有什么办法可以优化这个sql语句,或者有没有其它的什么方法实现这个需求?
你的这个表有很大问题。
IP不该用varchar(32),你想后续查询时,这比较得多低效。通用的做法是用unsigned int配合inet_aton函数。
类似的channel字段,如果固定不变,可以用enum代替varchar. 在varchar(128)上建索引,没有比这更低效的了。实在不想用enum可以考虑对局部做索引,比如前12个字符,具体看情况。
time字段应该纳入索引。你建一个索引,包含三个字段(channel, status, time),顺序很重要,少的在前多的在后。
d中in的效率比较低,用所有ip减1天前所有ip,group by 默认显示最上面的一条数据,时间上可能还要排序吧
去重IP的SQL可以使用如下改进:
B) 当天ip去重数
<code>SELECT COUNT(DISTINCT ip) FROM log WHERE time >= {$begin} AND time </code>
C) 当天ip去重列表
<code>SELECT DISTINCT ip FROM log WHERE time >= {$begin} AND time </code>
D) 当天ip在当天之前出现过的去重数量 写法类似于B
这种问题应该用计数器来解决,尽量避免复杂逻辑查询,不然数据量足够多的时候很难搞的。
计数器可以直接用db或者memcache,redis之类来做。
或者每天定时跑脚本进行数据统计,实时查看mysql不合适

PHP kekal sebagai alat yang kuat dan digunakan secara meluas dalam pengaturcaraan moden, terutamanya dalam bidang pembangunan web. 1) PHP mudah digunakan dan diintegrasikan dengan lancar dengan pangkalan data, dan merupakan pilihan pertama bagi banyak pemaju. 2) Ia menyokong penjanaan kandungan dinamik dan pengaturcaraan berorientasikan objek, sesuai untuk membuat dan mengekalkan laman web dengan cepat. 3) Prestasi PHP dapat ditingkatkan dengan caching dan mengoptimumkan pertanyaan pangkalan data, dan komuniti yang luas dan ekosistem yang kaya menjadikannya masih penting dalam timbunan teknologi hari ini.

Dalam PHP, rujukan lemah dilaksanakan melalui kelas lemah dan tidak akan menghalang pemungut sampah daripada menebus objek. Rujukan lemah sesuai untuk senario seperti sistem caching dan pendengar acara. Harus diingat bahawa ia tidak dapat menjamin kelangsungan hidup objek dan pengumpulan sampah mungkin ditangguhkan.

Kaedah \ _ \ _ membolehkan objek dipanggil seperti fungsi. 1. Tentukan kaedah \ _ \ _ supaya objek boleh dipanggil. 2. Apabila menggunakan sintaks $ OBJ (...), PHP akan melaksanakan kaedah \ _ \ _ invoke. 3. Sesuai untuk senario seperti pembalakan dan kalkulator, meningkatkan fleksibiliti kod dan kebolehbacaan.

Serat diperkenalkan dalam Php8.1, meningkatkan keupayaan pemprosesan serentak. 1) Serat adalah model konkurensi ringan yang serupa dengan coroutine. 2) Mereka membenarkan pemaju mengawal aliran pelaksanaan tugas secara manual dan sesuai untuk mengendalikan tugas I/O-intensif. 3) Menggunakan serat boleh menulis kod yang lebih cekap dan responsif.

Komuniti PHP menyediakan sumber dan sokongan yang kaya untuk membantu pemaju berkembang. 1) Sumber termasuk dokumentasi rasmi, tutorial, blog dan projek sumber terbuka seperti Laravel dan Symfony. 2) Sokongan boleh didapati melalui saluran StackOverflow, Reddit dan Slack. 3) Trend pembangunan boleh dipelajari dengan mengikuti RFC. 4) Integrasi ke dalam masyarakat dapat dicapai melalui penyertaan aktif, sumbangan kepada kod dan perkongsian pembelajaran.

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.

PHP tidak mati, tetapi sentiasa menyesuaikan diri dan berkembang. 1) PHP telah menjalani beberapa lelaran versi sejak tahun 1994 untuk menyesuaikan diri dengan trend teknologi baru. 2) Ia kini digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan bidang lain. 3) Php8 memperkenalkan pengkompil JIT dan fungsi lain untuk meningkatkan prestasi dan pemodenan. 4) Gunakan OPCACHE dan ikut piawaian PSR-12 untuk mengoptimumkan prestasi dan kualiti kod.

Masa depan PHP akan dicapai dengan menyesuaikan diri dengan trend teknologi baru dan memperkenalkan ciri -ciri inovatif: 1) menyesuaikan diri dengan pengkomputeran awan, kontena dan seni bina microservice, menyokong Docker dan Kubernetes; 2) memperkenalkan pengkompil JIT dan jenis penghitungan untuk meningkatkan prestasi dan kecekapan pemprosesan data; 3) Berterusan mengoptimumkan prestasi dan mempromosikan amalan terbaik.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

Dreamweaver Mac版
Alat pembangunan web visual

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini